写点什么

【LeetCode】反转字符串中的元音字母 Java 题解

用户头像
HQ数字卡
关注
发布于: 2 小时前

题目描述

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


示例 1:
输入:"hello"输出:"holle"示例 2:
输入:"leetcode"输出:"leotcede"
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-vowels-of-a-string著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的每日一题是简单题目,要求交换元音字母。题目中没有给出元音字母,搜索一下,元音字母是 aeiouAEIOU。理解了元音字母,题目就好解决了。

  • 下面的解法使用了双指针的技巧。双指针简单描述就是使用两个指针移动,提升遍历效率,一般应用在数组相关的题目中。

  • 常见的双指针有首尾指针,也就是从首,尾同时遍历,本题用到了这个解法。从首尾分别找元音字母,然后交换。这里有个需要注意的地方,在交换之后要使指针移动,指向下一个位置,才能使程序正确

  • 常见的双指针还有快慢指针,一般用来判断有没有环。

通过代码

class Solution {    public String reverseVowels(String s) {        int n = s.length();        int left = 0;        int right = n - 1;        Set<Character> set = new HashSet<>();        set.add('a');        set.add('e');        set.add('i');        set.add('o');        set.add('u');        set.add('A');        set.add('E');        set.add('I');        set.add('O');        set.add('U');

char[] arr = s.toCharArray(); while (left < right) { if (left < n && !set.contains(arr[left])) { left++; } if (right >= 0 && !set.contains(arr[right])) { right--; }
if (set.contains(arr[left]) && set.contains(arr[right])) { char temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } }
return new String(arr); }}
复制代码

总结

  • 上述代码的时间复杂度是 O(n), 空间复杂度是 O(n)

  • 字符串题目还常常用来考察各位对编程语言 API 的熟悉程度。比如:trim(), split() 等函数使用,可以帮助我们简化代码,提升效率。需要大家熟悉。

  • 坚持算法每日一题,加油!

发布于: 2 小时前阅读数: 3
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】反转字符串中的元音字母Java题解