做算法题以来,最舒服的一道题😀
做算法的步骤:
写思路,标注步骤
先实现大头
考虑细节(越界问题、个例)
题目
思路
转换为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; } }```