242.有效的字母异位词
- 有效的字母异位词
难度简单173收藏分享切换为英文关注反馈
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
1.依次遍历比较
思路:异位次的含义是 一个字符串中字母的顺序改变,但是个数不变 就是异位词。
比较长度 如果长度不相等 返回false 然后将两个字符串进行排序,时间复杂度为O(logN)
然后进行依次比较 如果不相等直接返回true 不好的一点是 排序使时间复杂度提高了。
time 😮(NlogN)
space:O(1)
//time O(NlogN) space O(n)
public boolean isAnagram(String s, String t) {
//排序后比较
if(s.length() != t.length()){
return false;
}
char [] chs = s.toCharArray();
char [] cht = t.toCharArray();
Arrays.sort(chs);
Arrays.sort(cht);
return Arrays.equals(chs,cht);
}
2.哈希表
思路:如果长度不同 返回false 定义一个数组 26 s.charAt(i)-‘a’ 存储进数组 对应的下标 t.charAt(i)-‘a’ 不存储对应的下标。前者++ 后者-- 当最后数组为0是异位词,否则不是异位词。
time:O(n)
space:O(1)
public boolean isAnagram(String s, String t) {
//哈希表
if(s.length() != t.length()){
return false;
}
int [] alpha = new int [26];
for(int i=0;i<s.length();i++){
alpha[s.charAt(i) - 'a']++;
alpha[t.charAt(i) - 'a']--;
}
for(int i=0;i<alpha.length;i++){
if(alpha[i]!=0){
return false;
}
}
return true;
}