Hi,大家好,这里是炼手Rust专栏,我是xiaoK,今天来看一个小case:翻转元音。
提问
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u'、'A'、'E'、'I'、'O'、'U'。
例:
input:"hello"
output:"holle"
input:leetcode
output:leotcede
模板:
pub fn reverse_vowels(s: String) -> String {
}
分析
按照题设,我们只需要从两头找,找到第一对元音字母进行交换,然后向中间收缩,持续这个过程,就能完成该题。
解决方案
pub fn reverse_vowels(s: String) -> String {
let mut chars: Vec<char> = s.chars().collect();
let mut i = 0;
let mut j = chars.len() - 1;
while i < j {
if !matches!(chars[i],'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U') {
i += 1;
continue;
}
if !matches!(chars[j],'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U') {
j -= 1;
continue;
}
chars.swap(i,j);
i += 1;
j -= 1;
}
String::from_iter(chars)
}
Tick
- 将
String类型转换成char数组,需要使用s.chars().collect()。 char数组转换成String,使用String::from_iter(chars)。match表达式,有个宏定义matches!,返回表达式的匹配结果trueorfalse。