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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

每天一道LeetCode-----找到一个字符串在另一个字符串出现的位置,字符串内部顺序无要求

發布時間:2024/4/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道LeetCode-----找到一个字符串在另一个字符串出现的位置,字符串内部顺序无要求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Valid Anagram

原題鏈接Valid Anagram

實際上就是判斷兩個字符串中每個字符出現的個數是否相等,直接計算每個字符的個數就可以了。

class Solution { public:bool isAnagram(string s, string t) {unordered_map<char, int> shash;unordered_map<char, int> thash;for(auto ch : s)++shash[ch];for(auto ch : t)++thash[ch];if(shash.size() != thash.size())return false;for(auto it = shash.begin(); it != shash.end(); ++it){if(thash.find(it->first) == thash.end() || it->second != thash[it->first])return false;}return true;} };

也可以簡便一點,只用一個unordered_map,對于s中的字符,unordered_map加,對于p中的字符unordered_map減

class Solution { public:bool isAnagram(string s, string t) {if(s.size() != t.size())return false;unordered_map<char, int> hash;for(int i = 0; i < s.size(); ++i){++hash[s[i]];--hash[t[i]];}for(auto count : hash){if(count->second)return false;}return true;} };

Find All Anagrams in a String

原題鏈接Find All Anagrams in a String

接上道題,在s中找到所有p出現的位置,對p中字符的順序無要求。
這題和每天一道LeetCode—–給定字符串s和字符數組words,在s中找到words出現的位置,words內部字符串順序無要求很像,只是鏈接中要求的p是字符串數組,數組中的字符串不考慮順序。這里的p是字符串,字符串中的字符不考慮順序。

首先如果每三個比較一次的話會比較慢,因為設計到排序后再比較。可以使用滑動窗,保證窗口的大小為p的長度,每次減左加右。這樣可以避免排序,直接比較。

class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> res;if(s.size() < p.size())return res;/* p中字符的個數,只要滑動窗和pcnt相等,就代表找到一個 */vector<int> pcnt(128, 0);for(char ch : p)++pcnt[ch];/* 滑動窗 */vector<int> slide(128, 0);for(int i = 0; i < p.size(); ++i)++slide[s[i]];if(slide == pcnt)res.emplace_back(0);int left = 0;int right = p.size();while(right < s.size()){/* 每次減去左邊的元素,添加右邊的元素 */--slide[s[left]];++slide[s[right]];++left;if(slide == pcnt)res.emplace_back(left);++right;}return res;} };

Group Anagrams

原題鏈接Group Anagrams

把給定的字符串數組分類,組成字符相同的是一組。
可以用unordered_map記錄每一類在結果中的下標,如果結果中有這一類,就添加進去,否則,新創一類。

class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> res;unordered_map<string, int> hash;for(string &str : strs){string sorted = str;std::sort(sorted.begin(), sorted.end());if(hash.find(sorted) != hash.end())res[hash[sorted]].emplace_back(str);else{res.emplace_back({str});hash[sorted] = res.size() - 1;}}return res;} };

總結

以上是生活随笔為你收集整理的每天一道LeetCode-----找到一个字符串在另一个字符串出现的位置,字符串内部顺序无要求的全部內容,希望文章能夠幫你解決所遇到的問題。

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