January 24, 2019

345. Reverse Vowels of a String

345. Reverse Vowels of a String

双指针,冗长的 Java 代码。。

class Solution {
    public String reverseVowels(String s) {
        if (s == null || s.length() <= 1) {
            return s;
        }
        List<Character> vowels = new ArrayList<>();
        vowels.add('a');
        vowels.add('e');
        vowels.add('i');
        vowels.add('o');
        vowels.add('u');
        char[] sCharArray = s.toCharArray();
        int left = 0;
        int right = sCharArray.length - 1;
        while (left < right) {
            if (!vowels.contains(Character.toLowerCase(sCharArray[left]))) {
                left ++;
            } else if (!vowels.contains(Character.toLowerCase(sCharArray[right]))) {
                right --;
            } else {
                swap(sCharArray, left, right);
                left ++;
                right --;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < sCharArray.length; i++) {
            sb.append(sCharArray[i]);
        }
        return sb.toString();
    }
    
    private char[] swap(char[] array, int a, int b) {
        char temp = array[a];
        array[a] = array[b];
        array[b] = temp;
        return array;
    }
}

用 Python 写简单多了。

class Solution:
    def reverseVowels(self, s):
        """
        :type s: str
        :rtype: str
        """
        if not s or len(s) == 0:
            return s
        vowels = ['a', 'e', 'i', 'o', 'u']
        str_list = list(s)
        l, r = 0, len(s) - 1
        while l < r:
            if str_list[l].lower() not in vowels:
                l += 1
            elif str_list[r].lower() not in vowels:
                r -= 1
            else:
                str_list[l], str_list[r] = str_list[r], str_list[l]
                l += 1
                r -= 1
        return "".join(str_list)
comments powered by Disqus