天天看點

leetcode-242-有效的字母異位詞(valid anagram)-java

題目及用例

package pid242;
/*有效的字母異位詞

給定兩個字元串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。

示例 1:

輸入: s = "anagram", t = "nagaram"
輸出: true

示例 2:

輸入: s = "rat", t = "car"
輸出: false

說明:
你可以假設字元串隻包含小寫字母。

進階:
如果輸入字元串包含 unicode 字元怎麼辦?你能否調整你的解法來應對這種情況?




*/


public class main {
	
	public static void main(String[] args) {
		String [] testTable = {"anagramz","rat","avdf"};
		String [] testTable2 = {"nagaramz","car","avfd"};
		for (int i=0;i<testTable.length;i++) {
			test(testTable[i],testTable2[i]);
		}
	}
		 
	private static void test(String ito,String ito2) {
		Solution solution = new Solution();
		Boolean rtn;
		long begin = System.currentTimeMillis();
		System.out.println(ito);
		System.out.println(ito2);
		System.out.println();
		//開始時列印數組
		
		rtn= solution.isAnagram(ito,ito2);//執行程式
		long end = System.currentTimeMillis();	
		
		System.out.println("rtn" );
		System.out.print(rtn);
		System.out.println();
		System.out.println("耗時:" + (end - begin) + "ms");
		System.out.println("-------------------");
	}

}

           

解法一(成功,7ms,很快)

速度o(n),空間o©

注意:一定要先檢查一個情況:兩者的length是否相同,不然時間會變長!

典型的重複檢測的圖,由于限定26位小位數字母,直接用int【26】,否則用hashmap

s每有一個字母對應的int[i]加一個,同時t對應的減少一個

最後查是否全為0

public boolean isAnagram(String s, String t) {
		if(s.length()!=t.length()){
			return false;
		}
		//每個格子對應a-z,數字為s中對應字母的個數
		//在num中将t的對應字母減去
        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=0;i<26;i++){
        	if(num[i]!=0){
        		return false;
        	}
        }
		return true;
    }

           

其他的思路基本與這個一樣,也可以建兩個數組,都是加,然後比較是否相同,還有就是建立哈希map