345. 反转字符串中的元音字母
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。
看到这个题干就是一个困惑的大动作
输入:s = “hello”
输出:“holle”
输入:s = “leetcode”
输出:“leotcede”
看完两个示例更迷惑了
这个题的提示点是按照双指针来处理应该是双指针分别从头部和尾部访问,如果是元音字母,那么首尾指针的字母交换一下吧
没有考虑大写字母
class Solution {
public:
string reverseVowels(string s) {
int left = 0, right = s.size() - 1;
while (left<right)
{
if (s[left] == 'a' || s[left] == 'e' || s[left] == 'i' || s[left] == 'o' || s[left] == 'u')
{
if (s[right] == 'a' || s[right] == 'e' || s[right] == 'i' || s[right] == 'o' || s[right] == 'u')
{
char c = s[left];
s[left] = s[right];
s[right] = c;
left++;
right--;
}
else
right--;
}
else
left++;
}
return s;
}
};
虽然这个判断过分了,但是过了
class Solution {
public:
string reverseVowels(string s) {
int left = 0, right = s.size() - 1;
while (left<right)
{
if (s[left] == 'a' || s[left] == 'e' || s[left] == 'i' || s[left] == 'o' || s[left] == 'u'|| s[left] == 'A' || s[left] == 'E' || s[left] == 'I' || s[left] == 'O' || s[left] == 'U')
{
if (s[right] == 'a' || s[right] == 'e' || s[right] == 'i' || s[right] == 'o' || s[right] == 'u'|| s[right] == 'A' || s[right] == 'E' || s[right] == 'I' || s[right] == 'O' || s[right] == 'U')
{
char c = s[left];
s[left] = s[right];
s[right] = c;
left++;
right--;
}
else
right--;
}
else
left++;
}
return s;
}
};
大佬的做法是
auto isVowel = [vowels = "aeiouAEIOU"s](char ch) {
return vowels.find(ch) != string::npos;
};
写个可调用对象,然后直接调用查找是不是元音或者直接
string tool=“aoeiuAOEIU”;
tool.find(s[i])==-1