Nameless Site

But one day, you will stand before its decrepit gate,without really knowing why.

0%

有效的字母异位词

来自Leetcode第242题有效的字母异位词

给定两个字符串 st ,编写一个函数来判断 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 来生成变位词。因此,如果 TS 的变位词,对两个字符串进行排序将产生两个相同的字符串。此外,如果 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);
}