LeetCode 345. Reverse Vowels of a String 解题报告
题目描述
Write a function that takes a string as input and reverse only the vowels of a string.The vowels does not include the letter “y”.
示例
Example 1:
Given s = “hello”, return “holle”.
Example 2:
Given s = “leetcode”, return “leotcede”.
限制条件
没有明确给出。
解题思路
就是一道很简单的题目,典型的双指针,所以还是写一下解题报告。
因为要首尾替换单词里元音字母,所以很直接地就是设置两个变量作为指针分别指向字符串的首尾位置,当指针指向的位置不是元音字母就向中间移动指针,如果两者都是处在元音字母位置则交换两个位置的元音字母。
要注意的地方有两个:
1.结束条件是左边指针的位置不再小于右边指针位置
2.交换完字母后要同时移动两个指针
代码
class Solution {
public:
string reverseVowels(string s) {
int left = 0;
int right = s.length() - 1;
while(left < right) {
if (checkVowels(s[left]) && checkVowels(s[right])) {
char tempC = s[left];
s[left] = s[right];
s[right] = tempC;
left++;
right--;
} else if (checkVowels(s[left]) && !checkVowels(s[right])) {
right--;
} else if (!checkVowels(s[left]) && checkVowels(s[right])) {
left++;
} else {
left++;
right--;
}
}
return s;
}
bool checkVowels(const char c) {
bool isVowels = false;
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
isVowels = true;
break;
default:
break;
}
return isVowels;
}
};
总结
只要注意一下小的细节,这道题很容易就过了。
由于我没有学过算法,也没怎么熟悉STL的使用,因此刚开始的时候写出来的代码会显得很粗劣,之所以还是会贴出来,是想跟其他人的优秀代码做一个对比,慢慢学习其他人的长处。下面会给出自己看到的比较优雅的解法的文章链接:
EbowTang的LeetCode OJ 345 / 344 Reverse Vowels of a String / Reverse String
多学习,多积累,多总结,多反思。继续我的填坑之旅,加油!