【发布时间】:2016-01-21 02:52:52
【问题描述】:
我想知道“交换字符串中的元音”问题的以下两种解决方案在计算上是否等效(时间复杂度和内存)。
解决方案 1(带有条件嵌套 for 的主 for 循环):
package practiceQuestions.p1;
import java.util.HashSet;
public class Solution {
public static char[] solve (String text) {
HashSet vowelSet = new HashSet();
char[] vowels = {'a','e','i','o','u','A','E','I','O','U'};
for (char v : vowels) {
vowelSet.add(v);
}
char[] asCharArray = text.toCharArray();
int lastStop = asCharArray.length;
for (int i = 0; i < lastStop; i++) {
if(vowelSet.contains(asCharArray[i])) {
for (int j = lastStop - 1; j > i; j--) {
if(vowelSet.contains(asCharArray[j])) {
char temp = asCharArray[j];
asCharArray[j] = asCharArray[i];
asCharArray[i] = temp;
lastStop = j;
break;
}
}
}
}
return asCharArray;
}
public static void main(String[] args) {
String someText = "swap my vowels";
System.out.println(Solution.solve(someText));
}
}
解决方案2(我没有代码,但这里是解释):
有一个主要的while 循环,它从字符串的两端开始,并将所有元音存储在hashmap 中,整数作为键,字符作为值。然后,根据每个值的位置(键),该函数将交换所有元音字符(值)。
上面提到的两者在计算上是等价的吗?我确信解决方案 2 对内存的任务更多,但我不确定时间复杂度。我猜解决方案 1 会稍微快一些。
【问题讨论】:
标签: java performance memory time