提问人:Hamza Sajid 提问时间:10/8/2023 最后编辑:cafce25Hamza Sajid 更新时间:10/8/2023 访问量:52
rust 中替代合并字符串的算法
Algorithm for Alternate merge strings in rust
问:
这是我在 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
}
}
以下是测试用例失败:
输入 word1 = “ab” word2 = “PQRS”
电流输出 “APBQS”
预期输出 “APBQRS”
答:
1赞
Finomnis
10/8/2023
#1
如果两者中只有一个返回字符,则 Your 不匹配。这会导致跳过所述字符。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() {
println!("{}", merge_alternately("ab".into(), "pqrs".into()));
}
apbqrs
此外,如果你被允许使用库,那么迭代器的标准库就是 itertools
。它有一个 .interleave()
函数,可以完全满足您的需求:
use itertools::Itertools;
pub fn merge_alternately(word1: String, word2: String) -> String {
word1.chars().interleave(word2.chars()).collect()
}
fn main() {
println!("{}", merge_alternately("ab".into(), "pqrs".into()));
}
apbqrs
评论
(None, Some(..)
match