leetcode 438 找到字符串中所有字母异位词

 

这个题目的有些类似实现 strStr 这个算法题目。

解题关键点:

1.采用类似滑动窗口的算法遍历字符串s。

2.用两个哈希表保存字符串s和字符串p,中每个小写字母出现的次数。

C++代码:

class Solution {
public:
    bool equals(vector<int>& sc, vector<int>& pc)
    {
        for (int i = 0; i < sc.size(); i++)
        {
            if (sc[i] != pc[i])
                return false;
        }

        return true;
    }
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> result;
        if (s.size() == 0 || p.size() == 0 || s.size()<p.size()) return result;
        vector<int> sc(26,0);
        vector<int> pc(26,0);
        int pLen = p.size();
        int sLen = s.size();

        for (int i = 0; i < pLen; i++)
        {
            sc[s[i] - 'a']++;
            pc[p[i] - 'a']++;
        }
        if (equals(sc, pc)) result.push_back(0);
        
        for (int i = pLen; i < sLen; i++)
        {
            sc[s[i] - 'a']++;
            sc[s[i - pLen] - 'a']--;
            if (equals(sc, pc)) result.push_back(i-pLen+1);
        }

        return result;
    }
};

 

posted @ 2024-02-14 19:19  repinkply  阅读(24)  评论(0)    收藏  举报