问题:
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.
Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?
解决:
①使用hash table保存s字符串,遍历t字符串,若hash表中不存在则返回false,否则返回true即可。耗时4ms.
public class Solution {
public boolean isAnagram(String s, String t) {
char[] schar = s.toCharArray();
char[] tchar = t.toCharArray();
if(schar.length != tchar.length) return false;
int hash[] = new int[256];
for (char c : schar) {
hash[c] ++;
}
for (char c : tchar) {
if (hash[c] == 0) {
return false;
}else{
hash[c] --;
}
}
return true;
}
}
② 跟上面思路差不多,遍历s字符串时自减,遍历t字符串时自增,最后若hash table中存在不为0则返回false,否则返回true。
public class Solution {
public boolean isAnagram(String s, String t) {
int[] hash = new int[26];
for (char c : s.toCharArray()) {
hash[c - 'a']++;
}
for (char c : t.toCharArray()) {
hash[c - 'a']--;
}
for (int n : hash) {
if (n != 0) {
return false;
}
}
return true;
}
}
③ 可以排序后看是否相等。耗时8ms.
public 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);
}
}