春节刷题day14:LeetCode
1668. 最大重复子字符串
3. 无重复字符的最长子串
239. 滑动窗口最大值
1、1668. 最大重复子字符串
class Solution {
public:
int maxRepeating(string sequence, string word) {
int s1 = sequence.size(), s2 = word.size();
int k = s1 / s2;
for(int ans = k; ans >= 0; ans--){
string s = "";
for(int i = 0; i < ans; i++) s += word;
if(sequence.find(s) != string::npos) return ans;
}
return 0;
}
};
2、3. 无重复字符的最长子串
class Solution {
public:
unordered_map<char, int> pa;
int lengthOfLongestSubstring(string s) {
if(s == "") return 0;
int size = s.size();
int l = 0, r = 0, ans = 1;
bool ok = true;
pa[s[0]] = 1;
while(l <= r && r < size){
if(ok && r == size - 1) break;
if(ok){
if(pa[s[r + 1]] >= 1){
ok = false;
}
pa[s[r + 1]]++;
r++;
}else{
if(pa[s[r]] == 1){
ok = true; continue;
}
pa[s[l]]--;
l++;
}
if(ok) ans = max(ans, r - l + 1);
}
return ans;
}
};
3、239. 滑动窗口最大值
class Solution {
public:
class Deque{
public:
deque<int> que;
void pop(int val){
if(!que.empty() && val == que.front()) que.pop_front();
}
void push(int val){
while(!que.empty() && que.back() < val){
que.pop_back();
}
que.push_back(val);
}
int front(){
return que.front();
}
};
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
Deque que; vector<int> ans;
if(nums.size() == 0) return ans;
else{
for(int i = 0; i < k; i++) que.push(nums[i]);
ans.push_back(que.front());
for(int i = k; i < nums.size(); i++){
que.pop(nums[i - k]);
que.push(nums[i]);
ans.push_back(que.front());
}
}
return ans;
}
};
2021/2/19(先占个坑,晚上刷一下LeetCode上有关滑动窗口的题目)。