[LeetCode]345. Reverse Vowels of a String 解题报告(C++)
题目描述
Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Given s = “hello”, return “holle”.
Example 2:
Given s = “leetcode”, return “leotcede”.
Note:
The vowels does not include the letter “y”.
题目大意
- 将字符串中 元音字符 翻转
解题思路
方法1:
- 左右找. 找到元音字符翻转..
代码实现:
class Solution {
public:
string reverseVowels(string s) {
set<char> myset = { 'A','E','I','O','U' };
int i = 0, j = s.size() - 1;
while (i < j) {
char t1 = toupper(s[i]);
char t2 = toupper(s[j]);
if (myset.count(t1)&& myset.count(t2)){
swap(s[i++], s[j--]);
}
else if (myset.count(t1)) {
j--;
}
else if (myset.count(t2)) {
i++;
}
else {
i++; j--;
}
}
return s;
}
};
// 可以用string作为set
class Solution {
public:
string reverseVowels(string s) {
int left = 0, right = s.size() - 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--]);
}
return s;
}
};
方法2:
- 用
find_first_of
和find_last_of
代码实现:
class Solution {
public:
string reverseVowels(string s) {
int left = 0, right = s.size() - 1;
while (left < right) {
left = s.find_first_of("aeiouAEIOU", left);
right = s.find_last_of("aeiouAEIOU", right);
if (left < right) {
swap(s[left++], s[right--]);
}
}
return s;
}
};