题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词
解题思路:
1. 字母异位词就是相同的字母构成了不同的单词
2. 如果两个字符串的长度不一样就肯定不是字母异位词
3. 判断是否拥有相同的字符和字符出现的次数是否相同
代码实现:
方法一:将两个字符串中的字符排序,然后比较字符数组是否相同
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()){
return false;
}
char[] sChar = s.toCharArray();
char[] tChar = t.toCharArray();
Arrays.sort(sChar);
Arrays.sort(tChar);
String tempS = String.valueOf(sChar);
String tempT = String.valueOf(tChar);
if (tempS.equals(tempT)){
return true;
}else {
return false;
}
}
方法二:记录每个字符出现的次数,如果出现次数相同则为字母异位词
我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算 ss 字母的频率,用 tt 减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] c = new int[26];
for (int i = 0; i < s.length(); i++) {
c[s.charAt(i) - 'a']++;
c[t.charAt(i) - 'a']--;
}
for (int i : c) {
if (i != 0) {
return false;
}
}
return true;
}