Leecode 345 翻转字符串中的元音字母-双指针法

简介: 做算法的步骤:写思路,标注步骤先实现大头考虑细节(越界问题、个例)题目

做算法题以来,最舒服的一道题😀

image.png


做算法的步骤:


写思路,标注步骤

先实现大头

考虑细节(越界问题、个例)

题目

image.png


思路

转换为char型数组

怎么判断是不是元音字母?我想到的是HashMap中的containsKey()方法,那就把元音字母存进Map里

反向双指针,向中间逼近,直到两指针重合或交叉

把结果集(char型数组)拼接成String型字符串

代码

class Solution {
    public String reverseVowels(String s) {
        //1.转换为char数组
        char[] a = s.toCharArray();
        //2.把原因字母存进HashMap,用来判断是不是元音字母
        Map<Character,Integer> map = new HashMap<>();
        char[] words = {'a','o','e','i','u','A','O','E','I','U'};
        for(int i=0;i<words.length;i++){
            map.put(words[i],1);
        }
        //3.双指针向中间逼近,遇到元音字母互换位置,直到两指针重合或交叉
        int i=0;
        int j=a.length-1;
    while(i<j){
        char word1=a[i];
        char word2=a[j];
        if(!map.containsKey(word1)){
            i++;
        }
        if(!map.containsKey(word2)){
            j--;
        }
        if(map.containsKey(word1)&&map.containsKey(word2)){//交换位置
            char temp = word1;
            a[i]=word2;
            a[j]=temp;
            i++;
            j--;
        }
    }
    StringBuilder builder = new StringBuilder();
    for(int k=0;k<a.length;k++){
        builder.append(a[k]);
    }
    String result = String.valueOf(builder);
    return result;
    }
}```


相关文章
|
6月前
leetcode-917:仅仅反转字母
leetcode-917:仅仅反转字母
42 0
代码随想录 Day7 字符串1 LeetCode T344反转字符串 T541 反转字符串II 151翻转字符串的单词
代码随想录 Day7 字符串1 LeetCode T344反转字符串 T541 反转字符串II 151翻转字符串的单词
40 0
|
6月前
|
Java API C++
leetcode-151:翻转字符串里的单词
leetcode-151:翻转字符串里的单词
59 0
|
Shell
【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】
【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】
42 0
每日刷题|回溯法解决全排列问题第二弹之解决字符串、字母大小排列问题
每日刷题|回溯法解决全排列问题第二弹之解决字符串、字母大小排列问题
|
算法 前端开发 JavaScript
[LeetCode] 无重复字符的最长子串 & 最长回文子串
博主最近在看新的工作机会,也是在找一些leetcode上比较高频的算法复习一下,这里分享两道算法题的解题。
69 2
[LeetCode] 无重复字符的最长子串 & 最长回文子串
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
Leecode 242. 有效的字母异位词
Leecode 242. 有效的字母异位词
63 0
|
索引
Leecode 3. 无重复字符的最长子串
Leecode 3. 无重复字符的最长子串
56 0
|
算法 Java
翻转字符串里的单词 (LeetCode 151)
翻转字符串里的单词 (LeetCode 151)
155 0