原题
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”.
大意
在字符串中对调元音字母,比如hello变为holle;leetcode变为leotcede;返回变换后的字符串。
思路
确定元音字母为aoeiu,并且要考虑大写字母;
遍历字符串,使用两个指针来遍历,如果元音字母集合中不包含字符串中的数组,则向前移,后一个指针也是一样;
代码
char[] chars = s.toCharArray();
String voweld = "aoeiuAOEIU";
int start = 0;
int end = s.length() - 1;
while (start < end) {
while(start<end&&!voweld.contains(chars[start]+"")){
start++;
}
while(start<end&&!voweld.contains(chars[end]+"")){
end--;
}
if (start < end) {
char c = chars[start];
chars[start++] = chars[end];
chars[end--] = c;
}
}
System.out.println(new String(chars));
return new String(chars);
后来看到一个简单的解法,使用hash表,参考
http://www.cnblogs.com/qinduanyinghua/p/5510079.html
1 class Solution {
2 public:
3 string reverseVowels(string s) {
4 set<char> hash{'a', 'e', 'o', 'i', 'u','A', 'E', 'I', 'O', 'U'};
5 int len = s.length();
6 int left = 0, right = len - 1;
7 while(left < right){
8 if(hash.count(s[left]) == 0)
9 left++;
10 if(hash.count(s[right]) == 0)
11 right--;
12 if(hash.count(s[left]) != 0 && hash.count(s[right]) != 0 ){
13 swap(s[left], s[right]);
14 left++;
15 right--;
16 }
17 }
18 return s;
19
20 }
21 };