一.解法
https://leetcode-cn.com/problems/valid-anagram/
要點:排序,哈希表
Python用了排序法,s 和 t 的長度不同提前返回,而如果t 是 s 的變位詞,對兩個字符串進行排序?qū)a(chǎn)生兩個相同的字符串。
Java和C++用了26長度的數(shù)組代替哈希表,分別代表26個字母的個數(shù),初始26個字母個數(shù)都為0,遍歷s中所有字母,每個字母在數(shù)組相應(yīng)元素的值加一,再遍歷t中所有字母,每個字母在數(shù)組相應(yīng)元素的值減一,最后如果這個數(shù)組26個元素都為0說明是異位詞。
二.Python實現(xiàn)
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if sorted(s) != sorted(t):
return False
return True
三.C++實現(xiàn)
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size()!=t.size()) return false;
int length=s.size();
int cmp[26]={0};
for(int i=0;i<length;i++)
{
cmp[s[i]-'a']++;
cmp[t[i]-'a']--;
}
for(int i=0;i<26;i++)
if(cmp[i]!=0)
return false;
return true;
}
};
四.java實現(xiàn)
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length())
return false;
int[] alpha = new int[26];
for(int i = 0; i< s.length(); i++) {
alpha[s.charAt(i) - 'a'] ++;
alpha[t.charAt(i) - 'a'] --;
}
for(int i=0;i<26;i++)
if(alpha[i] != 0)
return false;
return true;
}
}