我的算法检查两个字符串是否相互排列正确的时间和 space 复杂度?
Are the time and space complexity for my algorithm for checking if two strings are permutations of each other correct?
/*
Returns true is the two strings are permutations of each other.
Time Complexity; O(nlog n) -> because of the java utils array sort
Space Complexity; O(1)
*/
public boolean isPermutationOptimized(String one, String two) {
if (one.length() != two.length()) {
return false;
}
return sort(one).equals(sort(two));
}
public String sort(String s) {
char[] c = s.toCharArray();
java.util.Arrays.sort(c);
return new String(c);
}
我相信时间复杂度是 O(nlogn),因为 java.utils 数组排序并且 space 复杂度是常数。
时间复杂度在平均和最坏情况下都是 O(nlogn)。
Space Timsort(使用的排序算法)的复杂度需要额外的 O(n) space:它不是常数复杂度而是线性复杂度。
一些参考资料:https://ericmervin.medium.com/what-is-timsort-76173b49bd16
你的算法的复杂度与Timsort的复杂度相同,因为你使用了该算法的两倍。
/*
Returns true is the two strings are permutations of each other.
Time Complexity; O(nlog n) -> because of the java utils array sort
Space Complexity; O(1)
*/
public boolean isPermutationOptimized(String one, String two) {
if (one.length() != two.length()) {
return false;
}
return sort(one).equals(sort(two));
}
public String sort(String s) {
char[] c = s.toCharArray();
java.util.Arrays.sort(c);
return new String(c);
}
我相信时间复杂度是 O(nlogn),因为 java.utils 数组排序并且 space 复杂度是常数。
时间复杂度在平均和最坏情况下都是 O(nlogn)。 Space Timsort(使用的排序算法)的复杂度需要额外的 O(n) space:它不是常数复杂度而是线性复杂度。 一些参考资料:https://ericmervin.medium.com/what-is-timsort-76173b49bd16
你的算法的复杂度与Timsort的复杂度相同,因为你使用了该算法的两倍。