1.题目

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例:

  1. 输入:"hello"
  2. 输出:"holle"
  3. 输入:"leetcode"
  4. 输出:"leotcede"

提示:

  • 元音字母不包含字母 “y” 。

2.思路

首先我们需要知道元音字母包括哪几个,26个英文字母中有5个元音字母与21个辅音字母构成,五个元音字母分别是:a、e、i、o、u

双指针解法:

  1. public String reverseVowels(String s) {
  2. // 对撞指针解法
  3. // 区分大小写
  4. if(s == null || s.length() < 2) return s;
  5. char[] chars = s.toCharArray();
  6. int i = 0, j = chars.length - 1;
  7. while (i < j) {
  8. // 从前向后找到元音
  9. while(i < chars.length && !isVowel(chars[i]))
  10. i++;
  11. // 从后向前找到元音
  12. while(j >= 0 && !isVowel(chars[j]))
  13. j--;
  14. if (i < j) {
  15. // 进行元音反转
  16. char temp = chars[i];
  17. chars[i] = chars[j];
  18. chars[j] = temp;
  19. i++;
  20. j--;
  21. }
  22. }
  23. return String.valueOf(chars);
  24. }
  25. // 判断一个字符是否是元音字母
  26. public boolean isVowel(char c) {
  27. return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'
  28. || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' ;
  29. }