Given two strings s
and t
, return true
if t
is an anagram of s
, and false
otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
Example 1:
Input: s = "anagram", t = "nagaram" Output: true
Example 2:
Input: s = "rat", t = "car" Output: false
Constraints:
1 <= s.length, t.length <= 5 * 104
s
andt
consist of lowercase English letters.
Follow up: What if the inputs contain Unicode characters? How would you adapt your solution to such a case?
class Solution {
public:
bool isAnagram(string s, string t) {
int hash[26];
for(int i=0;i<s.size();i++)hash[s[i]-'a']++;
for(int i=0;i<t.size();i++)hash[t[i]-'a']--;
for(int i=0;i<26;i++){
if(hash[i]!=0)return false;
}
return true;
}
};
注意:
1.其实想到用哈希表是一个很容易想到的点,但是怎么用哈希表来做的这个思路比较难
2.主要的思路就是用哈希表记录下s中每一个字母出现的频率,然后判断t中字母出现频率是否一致。在这里判断是否一致也不需要去记录t的字母频率,再去和s比较了,直接把对应下标--,看是否为0,即可。