题目描述:
示例 1:
示例 2:
题目分析:
- 元音字母有大小写两种形式:'a'、'e'、'i'、'o'、'u'、'A'、'E'、'I'、'O'、'U'
- 互换元音字母的位置,互换的两个元素都是元音字母才交换位置
思路分析:
简单难度,直接申请两个指针left=0,right=s.length() - 1.指向字符数组chars的首尾元素,然后判断是否都是元音字母,chars[left]不是元音字母则加一,chars[right]不是元音字母则减一,都是则交换元素为止。
代码实现:
class Solution {
public String reverseVowels(String s) {
int left = 0, right = s.length() - 1;
char[] chars = s.toCharArray();
List<Character> list = new ArrayList(); // 元音字母集合.
list.add('a');
list.add('e');
list.add('i');
list.add('o');
list.add('u');
list.add('A');
list.add('E');
list.add('I');
list.add('O');
list.add('U');
while (left < right) {
char left_ch = chars[left];
char right_ch = chars[right];
if (list.contains(left_ch) && list.contains(right_ch)) { // 都是元音字母,交换位置。
chars[left++] = right_ch;
chars[right--] = left_ch;
}
if (!list.contains(left_ch)) { // 不是元音字母,右移一位。
left++;
}
if (!list.contains(right_ch)) { // 不是元音字母,左移一位。
right--;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
sb.append(chars[i]);
}
return sb.toString();
}
}