1.题目:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
2.代码实现:
方法一:基于排序
class Solution {
public boolean isAnagram(String s, String t) {
//判断字符串的长度是否相同,如果不同直接返回false
if(s.length()!=t.length()){
return false;
}
//把字符串变成字符储存在字符数组中
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
//把数组排序
Arrays.sort(c1);
Arrays.sort(c2);
//比较排序后是否相同,因为排序后如果是字母异位词的话就应该是一样的
return Arrays.equals(c1,c2);
}
}
方法二:基于中间记录数组 或 哈希表
class Solution {
public boolean isAnagram(String s, String t) {
//定义一个数组用来计数,注意数组类型是int类型的,范围26就行,刚好对应26个字母
int[] record = new int[26];
//遍历字符串
for(int i=0; i<s.length(); i++){
record[s.charAt(i) - 'a']++;//使数组中的字符对应的++,注意要先把字符串变成字符,比如是a那么相减为0,那么就是让数组的第一个元素由0变成1
}
for(int i=0; i<t.length(); i++){
record[t.charAt(i) - 'a']--;
}
for(int i=0; i<record.length; i++){//遍历数组,判断数组的元素是否有非0的
if(record[i] != 0){
return false;//如果数组中有不是0的元素,那么就会返回false
}
}
return true;//最后说明数组中都是0,返回true
}
}