438. 找到字符串中所有字母异位词
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了438. 找到字符串中所有字母异位词相关的知识,希望对你有一定的参考价值。
438. 找到字符串中所有字母异位词
最优解:滑动窗口优化。
可用一个大小为 ∑ \\sum ∑的数组表示两个字符串对应的字母的差值,然后用一个 d i f dif dif变量维护不相同的字母个数。
每次维护 0 → ± 1 0\\rightarrow \\pm 1 0→±1 的 d i f dif dif变化,然后通过 d i f dif dif来判断是否相等即可。
class Solution
public:
vector<int> findAnagrams(string s, string p)
int sLen = s.size(), pLen = p.size();
if (sLen < pLen)
return vector<int>();
vector<int> ans;
vector<int> count(26);
for (int i = 0; i < pLen; ++i)
++count[s[i] - 'a'];
--count[p[i] - 'a'];
int differ = 0;
for (int j = 0; j < 26; ++j)
if (count[j] != 0)
++differ;
if (differ == 0)
ans.emplace_back(0);
for (int i = 0; i < sLen - pLen; ++i)
if (count[s[i] - 'a'] == 1) // 窗口中字母 s[i] 的数量与字符串 p 中的数量从不同变得相同
--differ;
else if (count[s[i] - 'a'] == 0) // 窗口中字母 s[i] 的数量与字符串 p 中的数量从相同变得不同
++differ;
--count[s[i] - 'a'];
if (count[s[i + pLen] - 'a'] == -1) // 窗口中字母 s[i+pLen] 的数量与字符串 p 中的数量从不同变得相同
--differ;
else if (count[s[i + pLen] - 'a'] == 0) // 窗口中字母 s[i+pLen] 的数量与字符串 p 中的数量从相同变得不同
++differ;
++count[s[i + pLen] - 'a'];
if (differ == 0)
ans.emplace_back(i + 1);
return ans;
;
以上是关于438. 找到字符串中所有字母异位词的主要内容,如果未能解决你的问题,请参考以下文章