242. 有效的字母異位詞(LeetCode)
阿新 • • 發佈:2021-07-14
題目描述
給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的字母異位詞。
示例1:
輸入: s = "anagram", t = "nagaram"
輸出: true
提示:
-
1 <= s.length, t.length <= 5 * 104
-
s 和 t 僅包含小寫字母
條件分析
- 需要記錄元素出現的次數;
- 兩個字串的長度是一樣的;
解題思路(查詢表)
- 可以定義一個map用來儲存s中字元及字元出現的次數;
- 遍歷nums2,如果nums2中的字元在map中不存在或者次數小於等於0,返回false,若存在map存在中且次數大於0,map中字元出現的次數--;
- 由於兩個字串長度是一樣的,因此不需要判斷map中的元素是否等於0;
- 進階解法,可以利用僅包含小寫字母這個選項,使用陣列來儲存元素出現的次數,更加節約記憶體;
編碼如下
public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } char[] sa = s.toCharArray(); Map<Character, Integer> map = new HashMap<>(); Integer value = null; for (char c : sa) { value = map.get(c); if (value == null) { map.put(c, 1); } else { map.put(c, ++value); } } char[] ta = t.toCharArray(); for (char c : ta) { value = map.get(c); if (value != null && value > 0) { map.put(c, --value); } else { return false; } } return true; }