编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入:“hello”
输出:“holle”
示例 2:
输入:“leetcode”
输出:“leotcede”
提示:
元音字母不包含字母 “y” 。
题解:
使用双指针,一个从前开始 指,一个从后开始指,遇到元音就交换
这里的注意点有两点:
1.Java中的String是不可变的,所以需要创建一个 StringBuffer
2.判断一个字符是不是元音字母,不要编写一个函数,放在一个set中,可以以O(1)时间去读取!
class Solution {
public String reverseVowels(String s) {
//java中String是不可变的
StringBuffer sb = new StringBuffer(s);
int i = 0;
int j = sb.length() - 1;
while(i < j){
//都是元音字母 进行交换
if(voews.contains(sb.charAt(i)) && voews.contains(sb.charAt(j))){
char temp = sb.charAt(i);
sb.setCharAt(i,sb.charAt(j));
sb.setCharAt(j,temp);
//交换完成之后 双指针 也需要移动!!!
i++;
j--;
}else if(voews.contains(sb.charAt(i))){
//如果i是元音字母 则 j--
j--;
}else if(voews.contains(sb.charAt(j))){
//如果j是元音字母 但i不是
i++;
}else{
i++;
j--;
}
}
return sb.toString();
}
//判断是否是原因字母
private static final Set<Character> voews = new HashSet<>(Arrays.asList('a','e','i','o','u','A','E','I','O','U'));
}