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?
給定兩個字符串,判斷t是否是s的異位構(gòu)詞
算法分析
異位構(gòu)詞:具體可參考維基百科,將一個詞的或句子中的字母重新排列,原文中每個字母只能使用一次,構(gòu)成一個新的詞或句子。
方法一(排序):
將給定的字符串轉(zhuǎn)換為數(shù)組,排序,判斷兩個數(shù)組是否相等即可。
Java代碼
public class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) return false;
char[] s_array = s.toCharArray();
char[] t_array = t.toCharArray();
Arrays.sort(s_array);
Arrays.sort(t_array);
return Arrays.equals(s_array, t_array);
}
}
方法二:
通過一個數(shù)組記錄已經(jīng)出現(xiàn)的字母的個數(shù)。如果為負(fù),return false
Java代碼
public class Solution {
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'] ++;
}
for (int i = 0; i < t.length(); i ++) {
counter[t.charAt(i) - 'a'] --;
if (counter[t.charAt(i) - 'a'] < 0) return false;
}
return true;
}
}