找到字串中的所有字母異位詞
阿新 • • 發佈:2021-11-28
給定兩個字串 s
和 p
,找到 s
中所有 p
的 異位詞 的子串,返回這些子串的起始索引。不考慮答案輸出的順序。
異位詞 指由相同字母重排列形成的字串(包括相同的字串)。
示例 1:
輸入: s = "cbaebabacd", p = "abc"
輸出: [0,6]
解釋:
起始索引等於 0 的子串是 "cba", 它是 "abc" 的異位詞。
起始索引等於 6 的子串是 "bac", 它是 "abc" 的異位詞。
思路:滑動視窗
vector<int> findAnagrams(string s, string p) { int slen=s.size(); int plen=p.size(); if(slen<plen){ return vector<int>(); } vector<int>ret; vector<int>sCount(26); vector<int>pCount(26); for(int i=0;i<plen;i++){ pCount[p[i]-'a']++; sCount[s[i]-'a']++; } if(pCount==sCount){ ret.emplace_back(0); } for(int i=0;i<slen-plen;i++){ sCount[s[i]-'a']--; sCount[s[i+plen]-'a']++; if(sCount==pCount){ ret.emplace_back(i+1); } } return ret; }