LeetCode刷题笔记(Reverse Vowels of a String)
紧接着笔者又刷了一道题,感觉套路和之前很类似。
具体题目如下:
Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Input: "hello"
Output: "holle"
Example 2:
Input: "leetcode"
Output: "leotcede"
Note:
The vowels does not include the letter "y".
题意分析:
给定一个字符串,将其中的元音字母进行翻转,注意元音字母不包括y。
解答如下:
方法一(对撞指针法)
用两个指针分别指向字符串的两端然后起头并进,当两个指针都指向了元音字母时再进行判断。
这里有几点需要注意:①直接用while(s[l] != 'a' || s[l] != 'u' || s[l] != 'i' || s[l] != 'e' || s[l] != 'o' || s[l] != 'A' || s[l] != 'U' || s[l] != 'I' || s[l] != 'E' || s[l] != 'O' && l < r)去判断本身没有错,但是测试时会得到一个“Time Limit Exceeded”结果,这种情况一般是把这种复杂的与或运算写成一个子函数用于调用就ok了。②还要考虑元音字母的大小写问题。
class Solution {
public:
string reverseVowels(string s) {
int l = 0;
int r = (int)s.size() - 1;
while( l < r ){
while(!isVowel(s[l]) && l < r) l ++; //在l < r的前提下才考虑要不要l ++,所以判断要加上l < r
while(!isVowel(s[r]) && l < r) r --;
swap(s[l], s[r]);
l++;
r--;
}
return s;
}
bool isVowel(char c){
char lowerc = tolower(c);//要考虑大小写问题
return lowerc == 'a' || lowerc == 'e' || lowerc == 'i' || lowerc == 'o' || lowerc == 'u';
}
};
提交后的结果如下: