345. Reverse Vowels of a String
来源:互联网 发布:java 读取表单文件 编辑:程序博客网 时间:2024/06/05 09:30
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'}; ArrayList<Character> list = new ArrayList<>(); ArrayList<Integer> 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<end && vowels.indexOf(s.charAt(start)) == -1) { start++; } while(start<end && vowels.indexOf(s.charAt(end)) == -1) { end--; } sb.setCharAt(start, s.charAt(end)); sb.setCharAt(end, s.charAt(start)); start++; end--; } return sb.toString(); }}
另外再分享一种双向算法。4ms solution in Java
0 0
- String:345. Reverse Vowels of a String
- 345. Reverse Vowels of a String 【E】
- LeetCode 345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- leetcode-345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- #leetcode#345. Reverse Vowels of a String
- [leetcode] 345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- Leetcode:345. Reverse Vowels of a String
- LeetCode *** 345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- LeetCode.345. Reverse Vowels of a String
- 345. Reverse Vowels of a String
- LeetCode 345. Reverse Vowels of a String
- 数据库高级操作
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- python面向对象例子
- 约瑟夫环问题
- 风筝的研究
- 345. Reverse Vowels of a String
- dubbo异步调用传递性问题的解决方案
- ]iOS开发学习路径的一些建议
- p2p结构
- POJ3414-Pots
- Intellij IDEA 下载 激活
- cocos2d-x使用AssetsManager类实现资源的在线更新
- 装饰模式C++实现
- java动态代理机制