这是我在 Rust 中替代合并字符串的代码。我没有得到预期的输出。它对于等长的字符串效果很好。问题是,当我们有不相等的字符串时,它会跳过一个字符。
impl Solution {
pub fn merge_alternately(word1: String, word2: String) -> String {
let mut merged = String::new();
let mut chars1 = word1.chars();
let mut chars2 = word2.chars();
while let (Some(c1), Some(c2)) = (chars1.next(), chars2.next()) {
merged.push(c1);
merged.push(c2);
}
// Append any remaining characters from word1
while let Some(c1) = chars1.next() {
merged.push(c1);
}
// Append any remaining characters from word2
while let Some(c2) = chars2.next() {
merged.push(c2);
}
merged
}
}
这是测试用例失败:
输入 单词1 = “ab” 单词2 = “pqrs”
电流输出 “apbqs”
预期产出 “apbqrs”
如果两者中只有一个返回字符,则您的
while let (Some(c1), Some(c2))
不匹配。这会导致所述字符被跳过。
您的三个
while let
循环可以合并为一个loop{match}
,要求正确处理所有情况:
pub fn merge_alternately(word1: String, word2: String) -> String {
let mut merged = String::new();
let mut chars1 = word1.chars();
let mut chars2 = word2.chars();
loop {
match (chars1.next(), chars2.next()) {
(Some(c1), Some(c2)) => merged.extend([c1, c2]),
(Some(c1), None) => merged.push(c1),
(None, Some(c2)) => merged.push(c2),
(None, None) => break,
}
}
merged
}
fn main() {
let word1 = "ab".to_string();
let word2 = "pqrs".to_string();
println!("{}", merge_alternately(word1, word2));
}
apbqrs