567. Permutation in String
Sliding Windowを用いた方法
s1をソート
sliding window法を用いて、s1の長さ分だけs2の文字をソートしていく
https://leetcode.com/problems/permutation-in-string/discuss/1385457/Very-Easy-C%2B%2B-Solution
class Solution { public: bool checkInclusion(string s1, string s2) { if(s1.length() > s2.length() ){ return false; } sort(s1.begin(), s1.end()); for(int i= 0; i<s2.length()-s1.length()+1; i++){ string tmp = s2.substr(i, s1.length()); sort(tmp.begin(),tmp.end()); if(s1 == tmp){ return true; } } return false; } };
s1の各文字の個数を算出
sliding window法を持ちいて、s2の各文字の個数を算出し同じならtrue
1.cur[s2[i - s1.size()] - 'a']--;の意味 s2ではs1の文字数だけを見たいので、3 Input: s1 = "ab", s2 = "eidbaooo"ならば、idのところに来たらeを消す
class Solution { public: bool checkInclusion(string s1, string s2) { vector<int> cur(26), goal(26); for(char c : s1){ goal[c - 'a']++; } for(int i = 0; i < s2.size(); i++) { cur[s2[i] - 'a']++; if(i >= s1.size()) { cur[s2[i - s1.size()] - 'a']--; } if(goal == cur){ return true; } } return false; } };