Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以下是两个「;交换字符串中的元音“;解的计算等价性?_Java_Performance_Memory_Time - Fatal编程技术网

Java 以下是两个「;交换字符串中的元音“;解的计算等价性?

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

我想知道“交换字符串中的元音”问题的以下两种解决方案在计算上是否等效(时间复杂度和内存)

解决方案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);
}
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));
        }

    }