【发布时间】:2017-02-01 01:03:22
【问题描述】:
我正在尝试反转字符串的元音。我的程序可以工作,但它很慢并且在大字符串上超时。我怎样才能让它更快? 编写一个函数,将字符串作为输入并仅反转字符串的元音。
示例 1:给定 s = "hello"、return "holle"。
示例 2:给定 s = "leetcode"、return "leotcede"。
注意: 元音不包括字母“y”。
public class Solution {
public String reverseVowels(String s){
Set<Character> vowel = new HashSet<>();
char [] sArray = s.toCharArray();
vowel.add('a');
vowel.add('e');
vowel.add('o');
vowel.add('i');
vowel.add('u');
vowel.add('A');
vowel.add('E');
vowel.add('I');
vowel.add('O');
vowel.add('U');
Stack<Character> v = new Stack<>();
String temp = "";
int i = 0;
for (Character c: sArray){
if (vowel.contains(c)){
v.push(c);
}
i++;
}
for (Character c: sArray){
if (vowel.contains(c)){
if (!v.empty())
c = v.pop();
}
temp+= c;
}
return temp;
}
}
编辑:我已将代码更改为使用 StringBuilder,现在它通过了测试用例,但它仍然比 95% 的 Java 解决方案慢,因此我将进行其他更改以使其更快。我的程序运行缓慢并不完全是因为没有使用 StringBuilder。即使进行了这种更改,我的程序仍然很慢。这不是其他问题的重复。
【问题讨论】:
-
你试过修改sArray吗?