給定兩個字符串 s 和 t 抽米,編寫一個函數(shù)來判斷 t 是否是 s 的一個字母異位詞。
示例 1:
輸入: s = "anagram", t = "nagaram"
輸出: true
示例 2:
輸入: s = "rat", t = "car"
輸出: false
說明:
你可以假設(shè)字符串只包含小寫字母糙置。
進階:
如果輸入字符串包含 unicode 字符怎么辦?你能否調(diào)整你的解法來應(yīng)對這種情況是目?
思路1
用map的key存該字符谤饭,value存該字符出現(xiàn)的次數(shù),再用該map去檢測字符串t懊纳,有這個字符揉抵,相對應(yīng)的value減一
class Solution {
public boolean isAnagram(String s, String t) {
HashMap<Character,Integer> map=new HashMap<Character,Integer>();
char s1[]=s.toCharArray();
char t1[]=t.toCharArray();
if(s1.length==0&&t1.length==0){
return true;
}
for(int i=0;i<s1.length;++i){
if(map.containsKey(s1[i])){
map.put(s1[i],map.get(s1[i])+1);
}else{
map.put(s1[i],1);
}
}
for(int i=0;i<t1.length;++i){
if(map.containsKey(t1[i])){
map.put(t1[i],map.get(t1[i])-1);
}else{
return false;
}
}
int c=0;
for(int i=0;i<s1.length;++i){
if(map.get(s1[i])==0){
++c;
if(c==s1.length){
return true;
}
}else{
return false;
}
}
return false;
}
}
思路2
用s[i]-'a'作為sflag的下標,值就是該字符出現(xiàn)的次數(shù)嗤疯,對兩個字符串都進行此操作冤今,最后對比次數(shù),完全一樣就返回true
bool isAnagram(char* s, char* t) {
int len1=strlen(s);
int len2=strlen(t);
int sflag[26]={0};
int tflag[26]={0};
for(int i=0;i<len1;++i){
sflag[s[i]-'a']+=1;
}
for(int i=0;i<len2;++i){
tflag[t[i]-'a']+=1;
}
for(int i=0;i<26;++i){
if(sflag[i]==tflag[i]){
}else{
return false;
}
}
return true;
}