[精选代码笔记]Anagram, group-anagrams, two sum
生活随笔
收集整理的這篇文章主要介紹了
[精选代码笔记]Anagram, group-anagrams, two sum
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Valid anagram
242. 有效的字母異位詞 題目鏈接:https://leetcode-cn.com/problems/valid-anagram/ 給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的字母異位詞。示例 1:輸入: s = "anagram", t = "nagaram" 輸出: true 示例 2:輸入: s = "rat", t = "car" 輸出: false 說明: 你可以假設字符串只包含小寫字母。進階: 如果輸入字符串包含 unicode 字符怎么辦?你能否調整你的解法來應對這種情況?Python
# 思路:手動模擬hashtable,將字符串”a-z“的ASCII碼作key,計數求差異 def isAnagram(self, s: str, t: str) -> bool:arr1, arr2 = [0]*26, [0]*26for i in s:arr1[ord(i) - ord('a')] += 1for i in t:arr2[ord(i) - ord('a')] += 1return arr1 == arr2 # 思路:map計數,對比計數差異def isAnagram(self, s: str, t: str) -> bool:dict1, dict2 = {}, {}for item in s:dict1[item] = dict1.get(item,0) + 1for item in t:dict2[item] = dict2.get(item,0) + 1return dict1 == dict2 # 思路:數組排序后比較差異def isAnagram(self, s: str, t: str) -> bool:return sorted(s) == sorted(t)Java
public class Solution {public boolean isAnagram(String s, String t) {if(s.length() != t.length()) return false;int [] a = new int [26];for(Character c : s.toCharArray()) a[c - 'a']++;for(Character c : t.toCharArray()) {if(a[c -'a'] == 0) return false;a[c - 'a']--;}return true;} } public boolean isAnagram(String s1, String s2) {int[] freq = new int[256];for(int i = 0; i < s1.length(); i++) freq[s1.charAt(i)]++;for(int i = 0; i < s2.length(); i++) if(--freq[s2.charAt(i)] < 0) return false;return s1.length() == s2.length(); } public boolean isAnagram(String s, String t) {char[] sChar = s.toCharArray();char[] tChar = t.toCharArray();Arrays.sort(sChar);Arrays.sort(tChar);return Arrays.equals(sChar, tChar); }Group Anagrams:
49. 字母異位詞分組 題目鏈接:https://leetcode-cn.com/problems/group-anagrams/ 給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。示例:輸入: ["eat", "tea", "tan", "ate", "nat", "bat"] 輸出: [["ate","eat","tea"],["nat","tan"],["bat"] ] 說明:所有輸入均為小寫字母。 不考慮答案輸出的順序。Python
def groupAnagrams(self, strs):d = {}for w in sorted(strs):key = tuple(sorted(w))d[key] = d.get(key, []) + [w]return d.values() def groupAnagrams(self, strs):dic = {}for item in sorted(strs):sortedItem = ''.join(sorted(item))dic[sortedItem] = dic.get(sortedItem, []) + [item]return dic.values()Java
public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> res = new ArrayList<>();HashMap<String, List<String>> map = new HashMap<>();Arrays.sort(strs);for (int i = 0; i < strs.length; i++) {String temp = strs[i];char[] ch = temp.toCharArray();Arrays.sort(ch);if (map.containsKey(String.valueOf(ch))) {map.get(String.valueOf(ch)).add(strs[i]);} else {List<String> each = new ArrayList<>();each.add(strs[i]);map.put(String.valueOf(ch), each);}}for (List<String> item: map.values()) {res.add(item);}return res; }Two sum
1. 兩數之和 題目鏈接:https://leetcode-cn.com/problems/two-sum/description/ 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。示例:給定 nums = [2, 7, 11, 15], target = 9因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]Python
def twoSum(self, nums, target):d = dict()for index,num in enumerate(nums):if d.get(num) == None:d[target - num] = indexelse:return [d.get(num), index]Java
public int[] twoSum(int[] nums, int target) {HashMap<Integer, Integer> tracker = new HashMap<Integer, Integer>();int len = nums.length;for (int i = 0; i < len; i++){if (tracker.containsKey(nums[i])){int left = tracker.get(nums[i]);return new int[]{left+1, i+1};} else {tracker.put(target - nums[i], i);}}return new int[2];}總結
以上是生活随笔為你收集整理的[精选代码笔记]Anagram, group-anagrams, two sum的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ list::splice()用法
- 下一篇: 【面试】 C++ 面试题笔记(不定期更新