0
点赞
收藏
分享

微信扫一扫

反转字符串中的元音字母

前端王祖蓝 2021-09-21 阅读 59
今日算法
题目描述:
示例 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(); 
    }
}
举报

相关推荐

0 条评论