無名殺擴充套件【玄武江湖】武將篇:蔣素素
阿新 • • 發佈:2022-04-02
438. 找到字串中所有字母異位詞
解題思路:
設字串p的長度為k,在字串s上維護一個大小為k的滑動視窗。判斷滑動窗口裡的字串和p是否是異位詞。通過統計字串P中每一個字元出現的次數來判斷單詞是否是異位詞。利用雜湊表來記錄每個單詞出現的次數,當滑動視窗移動的時候注意更新移除視窗的單詞的出現個數。
程式碼:
class Solution { public: vector<int> findAnagrams(string s, string p) { vector<int> ans; if (s.size() < p.size()) return ans; int k = p.size(), n = s.size(); //維護一個大小為k的滑動視窗 vector<int> s_table(26); vector<int> p_table(26); for (int i = 0; i < k; ++ i) { ++s_table[s[i] - 'a']; ++p_table[p[i] - 'a']; } if (s_table == p_table) ans.emplace_back(0); for (int i = k; i < n; ++ i) { --s_table[s[i - k] - 'a']; ++s_table[s[i] - 'a']; if (s_table == p_table) ans.emplace_back(i - k + 1); } return ans; } };