天天看點

Valid Anagram (java)

題目:

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.

了解題意:字元串t是字元串s中一些或者全部字母颠倒順序得到的,就是anagram。

初始想法:用一個

hashMap<Integer,Character>

周遊儲存s中字元,然後周遊t字元串,若周遊的目前字元不存在

map

中,直接傳回

false

;若字元包含在

map

中,則删除改映射。實作上有問題,

hashMap

containsValue(Object value)

函數傳回的是布爾值,無法得到

key

,就不能通過

remove

函數删除映射關系。

正确思路:

hashMap<Character, Integer> 周遊儲存s中字元

key

為字元,

value

為字元出現的次數。在周遊t中字元時,若目前字元在

map

中不存在,傳回

false

;若存在,通過

hashMap.get(Object key)

得到該字元出現的次數,減一,更新

hashmap

。最後看

map

的value的視圖集合中,值是否有不等于0的,若沒有則是anagram。

代碼實作:

public class Solution {
    public boolean isAnagram(String s, String t) {
    if(s.length() != t.length()) return false;

        Map< Character, Integer> sMap = new HashMap<Character, Integer>();
        for(int i=; i< s.length(); ++i)
        {
            if(sMap.containsKey(s.charAt(i)))
            {
                int tmp = sMap.get(s.charAt(i))+;
                sMap.put(s.charAt(i), tmp);
            }
            else{
                sMap.put(s.charAt(i), );
            }
        }

        for(int j = ; j<t.length(); ++j)
        {
            if(!sMap.containsKey(t.charAt(j))) return false;
            else{
                int tmp = sMap.get(t.charAt(j))-;
                sMap.put(t.charAt(j), tmp);
            }
        }
        Set<Character> keySet = sMap.keySet();
        Iterator<Character> iter= keySet.iterator();
        while(iter.hasNext())
        {
            Character  key = iter.next();
            if(sMap.get(key)!=)
                return false;
        }
        return true;

    }
}
           

在網上看到另解:

因為變形詞兩個單詞對應字母出現的次數都相同,是以如果将兩個單詞按字母順序排序,肯定會變為一個字元串,如果字元串不相同,則不是變形詞。

public class Solution {
    public boolean isAnagram(String s, String t) {
        char[] sArr=s.toCharArray();
        char[] tArr=t.toCharArray();
        Arrays.sort(sArr);
        Arrays.sort(tArr);
        return String.valueOf(sArr).equals(String.valueOf(tArr));
    }
}