1. 程式人生 > 遊戲資訊 >無名殺擴充套件【玄武江湖】武將篇:蔣素素

無名殺擴充套件【玄武江湖】武將篇:蔣素素

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;
    }
};