1. 程式人生 > 其它 >leetcode刷題日記1

leetcode刷題日記1

438.找到字串中所有字母異位詞

給定兩個字串s和 p,找到s中所有p的異位詞的子串,返回這些子串的起始索引。不考慮答案輸出的順序。

異位詞 指字母相同,但排列不同的字串。

上程式碼

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        if(s.size()< p.size()) return {};
        vector<int> vec_s(26,0),vec_p(26,0),res;
        int l = 0,r = -1;
        for(int i = 0;i < p.size();++i){ //先將p中字母遍歷一遍
            vec_s[s[++r] - 'a']++;
            vec_p[p[i] - 'a']++;
        }
        if(vec_p == vec_s) res.push_back(l);

        while(r < s.size() -1){
            vec_s[s[++r] - 'a']++;
            vec_s[s[l++] - 'a']--;
            if(vec_p == vec_s) res.push_back(l);
        }
        return res;
    }
};

這個解法非常巧妙的利用vector做到了對映功能,把下標和字母對應了起來,非常巧妙值得回味