給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來判斷 t 是否是 s 的一個(gè)字母異位詞泽本。
示例 1:
輸入: s = "anagram", t = "nagaram"
輸出: true
示例 2:
輸入: s = "rat", t = "car"
輸出: false
說明:
你可以假設(shè)字符串只包含小寫字母
進(jìn)階:
如果輸入字符串包含 unicode 字符怎么辦淘太?你能否調(diào)整你的解法來應(yīng)對這種情況?
解法1:
思路:(感覺比較巧妙)用一個(gè)大小為26的int數(shù)組順序表示26個(gè)字母的位置规丽,遍歷s字符串每個(gè)字符蒲牧,對應(yīng)字符在數(shù)組中加1;遍歷t字符串每個(gè)字符赌莺,對應(yīng)字符在數(shù)組中減1冰抢,最后判斷數(shù)組內(nèi)元素是否全為0,是則返回true雄嚣,否則false晒屎。
class Solution {
public boolean isAnagram(String s, String t) {
int[] chall=new int[26];
for(int i=0;i<s.length();i++){
chall[s.charAt(i)-'a']++;
}
for(int j=0;j<t.length();j++){
chall[t.charAt(j)-'a']--;
}
for(int i: chall){
if(i!=0){
return false;
}
}
return true;
}
}
解法2:
思路:把字符串轉(zhuǎn)換成字符數(shù)組,排序缓升,然后逐個(gè)比較鼓鲁,如果有不符合,則返回false港谊,如果比對完全相同骇吭,則返回true。(記得得先判斷兩數(shù)組長度是否相同)
class Solution {
public boolean isAnagram(String s, String t) {
char[] sstr= s.toCharArray();
char[] tstr= t.toCharArray();
Arrays.sort(sstr);
Arrays.sort(tstr);
if(sstr.length==tstr.length){
for(int i=0;i<sstr.length;i++){
if(sstr[i]!=tstr[i]){
return false;
}
}
}else{
return false;
}
return true;
}
}
BB一句:
注意:charAt()歧寺;Arrays.sort() 燥狰; chall [s.charAt(i)-'a']++; 棘脐;