给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram” 输出: true
示例 2:
输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
通过将俩个字符串转换为字符数组并且排序,返回对比结果。
class Solution { public boolean isAnagram(String s, String t) { char[] sChar = s.toCharArray(); char[] tChar = t.toCharArray(); Arrays.sort(sChar); Arrays.sort(tChar); return Arrays.equals(sChar,tChar); } }新建俩个Map集合,将字符串转换为字符数组并将字符作为key,出现次数作为value存储在map中,返回俩个map对比的结果。
class Solution { public boolean isAnagram(String s, String t) { if(s.length() != t.length()){ return false; } Map<Character,Integer> sMap = new HashMap<Character,Integer>(); Map<Character,Integer> tMap = new HashMap<Character,Integer>(); char[] sChars = s.toCharArray(); char[] tChars = t.toCharArray(); for (char sChar : sChars) { if(!sMap.containsKey(sChar)){ sMap.put(sChar,1); }else { sMap.put(sChar,sMap.get(sChar) + 1); } } for (char tChar : tChars) { if(!tMap.containsKey(tChar)){ tMap.put(tChar,1); }else { tMap.put(tChar,tMap.get(tChar) + 1); } } return sMap.equals(tMap); } }自建哈希表,循环遍历俩个字符串。每次循环,取出s中第i个元素,将其ASCII码减去字母a对应的ASCII码,即可知道当前字符在数组中的位置,然后将该位置对应的字符出现次数+1,然后取出t中第i个元素,将其ASCII码减去字母a对应的ASCII码,即可知道当前字符在数组中的位置,然后将该位置对应的字符出现次数-1。 循环结束,遍历数组map,如果map中存在个数不为0的字符,则说明不是字母异位词,否则就是字母异位词。
public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } int[] counter = new int[26]; for (int i = 0; i < s.length(); i++) { counter[s.charAt(i) - 'a']++; counter[t.charAt(i) - 'a']--; } for (int count : counter) { if (count != 0) { return false; } } return true; }