本文共 1263 字,大约阅读时间需要 4 分钟。
Write a function that takes a string as input and reverse only the vowels of a string.
两种思路,第一种,一次性遍历完保存出现元音的地方,然后再来替换,第二种,双向边遍历边变换。显然第一种耗时也相对耗空间。给出两种做法的代码。
单向遍历,用两个 ArrayList 分别按出现的顺序保存出现的元音与位置。之后再按顺序替换。耗时20ms。代码如下:
public class Solution { public String reverseVowels(String s) { char [] vowels = { 'a','e','i','o','u','A','E','I','O','U'}; ArrayListlist = new ArrayList<>(); ArrayList loc = new ArrayList<>(); StringBuilder sb = new StringBuilder(s); for(int i = 0; i < s.length(); i++) { for(int j = 0; j < vowels.length; j++) { if(vowels[j] == s.charAt(i)) { list.add(vowels[j]); loc.add(i); break; } } } for(int i = 0; i < loc.size(); i++) { sb.setCharAt(loc.get(i), list.get(loc.size()-i-1)); } return sb.toString(); }}
两个指针,一个从前走一个从后走,遇到元音后替换位置。代码如下:
public class Solution { public String reverseVowels(String s) { int start = 0; int end = s.length() - 1; String vowels = "aeiouAEIOU"; StringBuilder sb = new StringBuilder(s); while(start < end) { while(start
另外再分享一种双向算法。
转载地址:http://qjjgj.baihongyu.com/