版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/84137305
题目
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: “hello”
输出: “holle”
示例 2:
输入: “leetcode”
输出: “leotcede”
说明:
元音字母不包含字母"y"。
解题
- 这一题其实和344的反转字符串是一个思路, 一样使用对撞指针
- 需要判断字母是不是元音字母, 非元音字母就跳过
- 为了节约时间, 提高性能, 分别将aeiouAEIOU10个字母以asc码作为下标, 放入一个boolean型数组中, 然后判断一个字母是不是元音时, 直接根据字母的asc码在数组中获取即可, 代码如下:
class Solution {
// 空间换时间, 字母对应的最大是asc码是122
// isVowel[i]为false表示i对应的字符不是元音, 为true是元音
private static boolean[] isVowel = new boolean[123];
static{
isVowel['a'] = true;
isVowel['e'] = true;
isVowel['i'] = true;
isVowel['o'] = true;
isVowel['u'] = true;
isVowel['A'] = true;
isVowel['E'] = true;
isVowel['I'] = true;
isVowel['O'] = true;
isVowel['U'] = true;
}
public String reverseVowels(String s) {
char[] chars = s.toCharArray();
int left = 0, right = chars.length - 1;
while(left < right){
if(!isVowel[chars[left]]){
left++;
continue;
}
if(!isVowel[chars[right]]){
right--;
continue;
}
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
return new String(chars);
}
}