日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[精选代码笔记]Anagram, group-anagrams, two sum

發布時間:2024/4/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [精选代码笔记]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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。