lc 字符串的排列

链接:https://leetcode-cn.com/explore/interview/card/bytedance/242/string/1016/

代码:

class Solution {
public:
    bool checkInclusion(string s1, string s2) {
        if(s1 == "") return true;
        if(s2 == "") return false;
        int len1 = s1.size();
        int len2 = s2.size();
        if(len1 > len2) return false;
        int exist[26] = {0};
        for(int i = 0; i < len1; i++) {
            exist[s1[i]-97]++;
        }
        // for(int i = 0; i < 26; i++) {
        //     cout << exist[i] << " ";
        // }
        // cout << endl;
        int flag = false;
        for(int i = 0; i < len2; i++) {
            int e2[26] = {0};
            for(int j = 0; j < 26; j++) {
                e2[j] = exist[j];
            }
            for(int j = i; j < len2 && j-i < len1; j++) {
                e2[s2[j]-97]--;
            }
            int j = 0;
            for(; j < 26; j++) {
                if(e2[j] != 0) break;
            }
            if(j == 26) {
                flag = true;
                break;
            }
        }
        return flag;
    }
};
View Code

思路:对于s2 的每一个长度为s1.length的串,看他的各个字母出现频率是否与s1 的字母出现频率相同,这个时候需要预处理 s1

猜你喜欢

转载自www.cnblogs.com/FriskyPuppy/p/12907888.html