给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
==============================================================================================================================================================================================
分析:
看了半天示例,没看出来字母异位词是什么意思,看了下官方的解释。
t 是 s 的异位词等价于「两个字符串排序后相等」。
法一:将两个String存到char[]中,进行排序,再比较即可。
法二:因为是字母,定义字符数组统计字母出现的次数,大小为26。统计s中的字母,出现一次自加1;统计t中的字母,出现一次自减一次。最后遍历数组,如果有不等于的数,则返回false,否则返回true
class Solution {
public boolean isAnagram(String s, String t) {
//字母异位次等价排序后,字母出现的频率一样
//那么字符串的长度应该一样
if(s.length()!=t.length()){
return false;
}
//因为是字母,所以定义长度为26的字符数组
char[] str=new char[26];
for(int i=0;i<s.length();i++){
str[s.charAt(i)-'a']++;
str[t.charAt(i)-'a']--;
}
//遍历str,有不为0的就是false
for(int i=0;i<26;i++){
if(str[i]!=0){
return false;
}
}
return true;
}
}