这道题的链接.题目给出一句话,这句话里每个单词有一个数字,代表了他应该排序的位置,你需要把它正确排序出来,比如输入"is2 thi1s t4est 3a",那么结果应该是"thi1s is2 3a t4est".
首先给出我的一个解法:
fn order(sentence: &str) -> String {
if sentence.len() == 0 {
return String::from("");
}
let words: Vec<&str> = sentence.split(' ').collect();
let mut result = words.clone();
for charts in words {
let mut index = 0;
for ch in charts.chars() {
if let Some(v) = ch.to_digit(10) {
index = v;
}
}
result[(index - 1) as usize] = charts;
}
result.join(" ")
}
然后我看到的一个解法:
fn order(sentence: &str) -> String {
let mut ws: Vec<_> = sentence.split_whitespace().collect();
ws.sort_by_key(|s| s.chars().find(|c| c.is_digit(10)).unwrap());
ws.join(" ")
}
非常的简单整洁,如果说要写出这类解法,那么文档肯定是要多读几遍的,做到各种方法烂熟于心,也需要多使用,否则也很容易忘记.