Java 以下是两个「;交换字符串中的元音“;解的计算等价性?
我想知道“交换字符串中的元音”问题的以下两种解决方案在计算上是否等效(时间复杂度和内存) 解决方案1(主Java 以下是两个「;交换字符串中的元音“;解的计算等价性?,java,performance,memory,time,Java,Performance,Memory,Time,我想知道“交换字符串中的元音”问题的以下两种解决方案在计算上是否等效(时间复杂度和内存) 解决方案1(主用于循环,条件嵌套用于): package practiceQuestions.p1; 导入java.util.HashSet; 公共类解决方案{ 公共静态字符[]解算(字符串文本){ HashSet-vouelset=新HashSet(); char[]元音={'a','e','i','o','u','a','e','i','o','u'}; for(char v:元音){ 元音集。添加(v
用于
循环,条件嵌套用于
):
package practiceQuestions.p1;
导入java.util.HashSet;
公共类解决方案{
公共静态字符[]解算(字符串文本){
HashSet-vouelset=新HashSet();
char[]元音={'a','e','i','o','u','a','e','i','o','u'};
for(char v:元音){
元音集。添加(v);
}
char[]asCharArray=text.toCharArray();
int lastStop=asCharArray.length;
对于(int i=0;ii;j--){
if(元音集包含(asCharArray[j])){
字符温度=asCharArray[j];
asCharArray[j]=asCharArray[i];
asCharArray[i]=温度;
lastStop=j;
打破
}
}
}
}
返回asCharArray;
}
公共静态void main(字符串[]args){
String someText=“交换我的元音”;
System.out.println(Solution.solve(someText));
}
}
解决方案2(我没有代码,但这里有解释):
有一个主while
循环,它从字符串的两端开始,将所有元音存储在hashmap
中,以整数作为键,字符作为值。然后,基于每个值的位置(键),函数将交换所有元音字符(值)
上面提到的两个在计算上是等价的吗?我确信解决方案2在内存上的任务更多,但我不确定时间复杂性。我猜解决方案1的速度稍微快一点。这不会太严格,但我相信它应该能坚持下去。 其中n是输入字符串的长度,我们正在考虑最坏的情况,即整个字符串都是元音 方法1
时间:n*(交换时间)+常数
嵌套的部分循环将形成一个完整的循环。
空格:n+常数
您只存储输入字符串、元音字典和一些计数器/交换变量 方法2
时间:n*(在hashmap中插入的时间)+n*(查找和交换的时间)+常量
这一个的计算量比另一个大得多。不是三操作交换,而是计算哈希代码并插入元素。然后,你做实际的替换
空格:(n的某些倍数)+常量
除了方法1所需的空间之外,哈希映射将为每个元素占用一些额外的空间。
希望这有帮助
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));
}
}