给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码一
先看原题目,将字符串转换为字符数组,然后进行排序,排序后比较,一旦出现不一样的,立马返回false
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
char[] arr1 = s.toCharArray();
char[] arr2 = t.toCharArray();
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1,arr2);
}
}
代码二,对于扩展,如果字符串中包含unicode字符怎么写
用HashMap
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
Map<Character,Integer> res = new HashMap<Character,Integer>();
for(int i = 0;i<s.length();i++){
char ch = s.charAt(i);
res.put(ch,res.getOrDefault(ch,0)+1);
}
for(int i = 0;i<t.length();i++){
char ch = t.charAt(i);
res.put(ch,res.getOrDefault(ch,0)-1);
if(res.get(ch)<0){
return false;
}
}
return true;
}
}
1.得出了一个重要认识:
当字符串中的字符比较简单,可数(比如只包含小写字母)时,用数组记录个字符频数,比较简单,int[ ] cnt = new int[26];
当包含很多字符时,用哈希表更方便记录频数