LeetCode 345. 反轉字串中的母音字母(C++)
阿新 • • 發佈:2019-02-07
題目:
編寫一個函式,以字串作為輸入,反轉該字串中的母音字母。
示例 1:
給定 s = “hello”, 返回 “holle”.
示例 2:
給定 s = “leetcode”, 返回 “leotcede”.
注意:
母音字母不包括 “y”.
思路:
還是對撞指標的題,不過需要判斷一下是否是母音字母,最直接的方法就是判斷是不是’a’ ‘e’ ‘i’ ‘o’ ‘u’ 或 ‘A’ ‘E’ ‘I’ ‘O’ ‘U’,但是這樣程式碼很長,可以先把字元轉換成大寫或者小寫,這樣判斷就少了一半,進一步簡化,可以在字串”aeiouAEIOU”中判斷是否包含正在判斷的字元。
程式碼一
class Solution {
public:
string reverseVowels(string s) {
if(s.empty())
return s;
int left = 0;
int right = s.length() -1;
while(left < right){
if((char)tolower(s[left]) != 'a' && (char)tolower(s[left]) != 'e' && (char )tolower(s[left]) != 'i'
&& (char)tolower(s[left]) != 'o' && (char)tolower(s[left]) != 'u')
++left;
else if((char)tolower(s[right]) != 'a' && (char)tolower(s[right]) != 'e' && (char)tolower(s[right]) != 'i'
&& (char )tolower(s[right]) != 'o'&& (char)tolower(s[right]) != 'u')
--right;
else{
swap(s[left],s[right]);
++left;
--right;
}
}
return s;
}
};
程式碼二
class Solution {
public:
string reverseVowels(string s) {
if(s.empty())
return s;
int left = 0;
int right = s.length() -1;
string t = "aeiouAEIOU";
while(left < right){
if (t.find(s[left]) == string::npos) ++left;
else if (t.find(s[right]) == string::npos) --right;
else {
swap(s[left], s[right]);
left++;
right--;
}
}
return s;
}
};