导航
导航
文章目录
  1. 题目
  2. 翻译
    1. 解法一
    2. 解法二

LeetCode-242.Valid Anagram

题目

Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = “anagram”, t = “nagaram”, return true.
s = “rat”, t = “car”, return false.

Note:
You may assume the string contains only lowercase alphabets.

翻译

给出两个字符串s和t,编写函数确定t与s是否是变位词。
例如:
s = “anagram”, t = “nagaram”, 返回true。
s = “rat”, t = “car”, 返回false。
注:
可以认为字符串只包含小写字母。

解法一

先转换为char数组,然后排序,然后转换为字符串,比较是否相等:

1
2
3
4
5
6
7
8
9
public boolean isAnagram(String s, String t) {
char[] sArr = s.toCharArray();
char[] tArr = t.toCharArray();

Arrays.sort(sArr);
Arrays.sort(tArr);

return String.valueOf(sArr).equals(String.valueOf(tArr));
}

解法二

因为题中说明只包含小写字母,所以可以新建一个大小为26的int数组,记录两个字符串每个字母包含的个数,最后比较是否每个字符数都一样即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;

int[] chars = new int[26]; // 因为说明都是小写字母,所以26足够
for (int i = 0; i < s.length(); i++) {
chars[s.charAt(i) - 'a']++;
chars[t.charAt(i) - 'a']--;
}

for (int i : chars)
if (i != 0)
return false;

return true;
}

参考:
http://blog.csdn.net/xudli/article/details/47208047
http://www.cnblogs.com/ganganloveu/p/4694703.html