来自Leetcode第242题有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
1 2
| 输入: s = "anagram", t = "nagaram" 输出: true
|
Map
用2个数组统计字符串里的字母出现次数,最后比对他们是否相等,进一步优化的,因为我们可以用一个计数器表计算 s 字母的频率,用 t减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public boolean isAnagram(String s, String t) { int len1 = s.length(), len2 = t.length(); if(len1 != len2) return false; int []map1 = new int[26]; int []map2 = new int[26]; for(int i = 0 ; i < len1 ; i++){ map1[s.charAt(i) - 'a']++; map2[t.charAt(i) - 'a']++; } for(int i = 0 ; i < 26 ; i++) if(map1[i] != map2[i]) return false; return true; }
|
排序
将 s 的字母重新排列成 t 来生成变位词。因此,如果 T 是 S 的变位词,对两个字符串进行排序将产生两个相同的字符串。此外,如果 s 和 t 的长度不同,t 不能是 s 的变位词,我们可以提前返回。
1 2 3 4 5 6 7 8 9 10
| public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } char[] str1 = s.toCharArray(); char[] str2 = t.toCharArray(); Arrays.sort(str1); Arrays.sort(str2); return Arrays.equals(str1, str2); }
|