首先想到的解法时利用滑动窗口,每次匹配一个长度等于p字符串长度的s字符串的子串,然后进行判定,如果是,则将所在位置添加到数组中。
在判断两个字符串是否是字母异位词时,直接copy了之前的代码,整体代码如下:
class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> v;int size_s = s.size();int size_p = p.size();for(int i = 0; i <= size_s - size_p; i++){string str(s, i, size_p);if(isAnagram(str, p)){v.push_back(i);}}return v;}bool isAnagram(string s, string t) {int record[26] = {0};for (int i = 0; i < s.size(); i++) {// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了record[s[i] - 'a']++;}for (int i = 0; i < t.size(); i++) {record[t[i] - 'a']--;}for (int i = 0; i < 26; i++) {if (record[i] != 0) {// record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。return false;}}// record数组所有元素都为零0,说明字符串s和t是字母异位词return true;}
};