package leetcode.sort;
import java.util.Arrays;
/**
* @Description: 有效的字母异步位 (长度相同,字母顺序不同)
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
public class lab242 {
/**
* @Description: 时间复杂度:O(n \log n),假设 n 是 ss的长度,排序成本 O(n\log n)和比较两个字符串的成本 O(n)。排序时间占主导地位,总体时间复杂度为 O(nlogn)。
空间复杂度:O(1),空间取决于排序实现,如果使用 heapsort,通常需要 O(1)辅助空间。注意,在 Java 中,toCharArray() 制作了一个字符串的拷贝,所以它花费 O(n)额外的空间,但是我们忽略了这一复杂性分析,因为:
这依赖于语言的细节。
这取决于函数的设计方式。例如,可以将函数参数类型更改为 char[]。
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
public boolean isAnagram(String s, String t) {// 这是转化为char数组,将它通过sort方法排序,通过equals返回比较结果
if (s.length() != t.length()) {
return false;
}
char[] s1 = s.toCharArray();
char[] t1 = t.toCharArray();
Arrays.sort(s1);
Arrays.sort(t1);
return Arrays.equals(s1, t1);
}
/**
* @Description: 时间复杂度:O(n)因为访问计数器表是一个固定的时间操作。
空间复杂度:O(1)尽管我们使用了额外的空间,但是空间的复杂性是 O(1)O(1),因为无论 NN 有多大,表的大小都保持不变。
* @Param:
* @return:
* @Author: lvhong
* @Date:
* @E-mail lvhong282@163.com
*/
//
// public boolean isAnagram(String s, String t) { //通过charAt将字符串内的字符-‘a' 存放在hash表内, 一个字符串对hash加,一个对hash减,最后判断hash表内每一个地址上的值是否是0
// if(s.length()!=t.length()){
// return false;
// }
// int[] counter = new int[26];
// for(int i=0;i<s.length();i++){
// counter[s.charAt(i)-'a']++;
// counter[t.charAt(i)-'a']--;
// }
// for(int c:counter){
// if(c !=0) {
// return false;
// }
// }
//// int j=0;
//// while(j<s.length()){
//// if(counter[j++]!=0){return false;}
//
//// }
// return true;
//
// }
}