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.
這道題目不難,AP程序如下:
if(s.equals(t))
return true;
if(s==null||t==null||s.length()!=t.length())
return false;
int[] num=new int[26];
for(int i=0;i<s.length();i++){
num[s.charAt(i)-'a']++;
num[t.charAt(i)-'a']--;
}
for(int i:num ){
if(i!=0)
return false;
}
return true;
同時,這道題目還有一種其他的解法,使用map來做:
if(s.equals(t))
return true;
if(s==null||t==null||s.length()!=t.length())
return false;
HashMap<Character, Integer> sMap=new HashMap<Character,Integer>();
HashMap<Character, Integer> tMap=new HashMap<Character,Integer>();
for(int i=0;i<s.length();i++){
if(sMap.containsKey(s.charAt(i))){
sMap.put(s.charAt(i),sMap.get(s.charAt(i))+1);
}else{
sMap.put(s.charAt(i),1);
}
if(tMap.containsKey(t.charAt(i))){
tMap.put(t.charAt(i),tMap.get(t.charAt(i))+1);
}else{
tMap.put(t.charAt(i),1);
}
}
for(Character key:sMap.keySet()){
if(!tMap.containsKey(key)||!tMap.get(key).equals(sMap.get(key)))
return false;
}
return true;
我想說的是,一定要注意以上程序在最後的地方,比較兩個map中的key,一定要用equals,不能用==,具體參見另一篇博客,明天更新。