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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetcode 242. 有效的字母异位词 思考分析

發布時間:2023/12/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 242. 有效的字母异位词 思考分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

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

我們先考慮低階版本,認為字符只有26種可能,然后將a ~ z的字符映射到數組的索引0 ~ 25,數組中存放的則是該索引出現的頻次。
記錄下s的頻次和t的頻次,然后比較是否相同,相同則是字母異位詞(出現的字母種類一樣多且每種出現的頻次一樣多)。
這里為了節省空間我們選擇直接在原數組上進行減法。
代碼:

class Solution { public:int nums[26];bool isAnagram(string s, string t) {//將字符映射到數組上for(int i=0;i<s.size();i++) {int index = s[i] - 'a';nums[index]++;}//for(int i=0;i<t.size();i++) {int index = t[i] - 'a';nums[index]--;}for(int i=0;i<26;i++){if(nums[i]!=0) return false;}return true;} };

對上面的代碼進行時間優化:

class Solution { public:int nums[26];bool isAnagram(string s, string t) {if(s.size() != t.size()) return false;//將字符映射到數組上for(int i=0;i<s.size();i++) {int index = s[i] - 'a';nums[index]++;}for(int i=0;i<t.size();i++) {int index = t[i] - 'a';nums[index]--;if(nums[index]==-1) return false;}return true;} };

在遍歷數組t的時候,計算nums[index]的值,如果不是異位詞匯且兩者字符數量一致,在nums數組中必定有差小于0的,這里我們取-1即可。為何不能取>0呢?因為我們是在遍歷的過程中從大到小刪減頻次,所以一開始肯定都是>0的。
對于進階版本,這邊直接貼力扣官方答案:
使用哈希表而不是固定大小的計數器。想象一下,分配一個大的數組來適應整個 Unicode 字符范圍,這個范圍可能超過 100萬。哈希表是一種更通用的解決方案,可以適應任何字符范圍。

思路2

我們這邊使用c++的容器,不使用數組。但是原理都是一樣的。

class Solution { public:bool isAnagram(string s, string t) {if(s.size() != t.size()) return false;unordered_map<char, int> map;for(int i=0;i<s.size();i++){map[s[i]] ++;}for(int i=0;i<t.size();i++){map[t[i]]--;if(map[t[i]]==-1) return false;}return true;} }; 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的leetcode 242. 有效的字母异位词 思考分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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