c++
class Solution {
public:
string reverseVowels(string s) {
if (s.empty() || s.size()==1)
return s;
string::iterator biter = s.begin();
string::iterator eiter = s.end()-1;
while (biter<eiter){
while (dict.find(*biter) == dict.end() && biter<eiter)
biter++;
while (dict.find(*eiter) == dict.end() && biter<eiter)
eiter--;
char tmp = *biter;
*biter = *eiter;
*eiter = tmp;
biter++;
eiter--;
}
return s;
}
private:
set<char> dict{ 'a','e','i','o','u', 'A', 'E','I','O','U'};
};
python
class Solution(object):
def reverseVowels(self, s):
"""
:type s: str
:rtype: str
"""
if len(s)<2:
return s
siter, eiter = 0, len(s)-1
s = list(s)
vol = set(list('aeiouAEIOU'))
while siter < eiter:
if s[siter] in vol and s[eiter] in vol:
s[siter], s[eiter] = s[eiter], s[siter]
siter += 1
eiter -= 1
if s[siter] not in vol:
siter += 1
if s[eiter] not in vol:
eiter -= 1
return ''.join(s)
https://leetcode.com/discuss/98983/python-2-pointers-solution