春节刷题day14:[LeetCode:1668、3、239]

春节刷题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上有关滑动窗口的题目)。

猜你喜欢

转载自blog.csdn.net/shangzhengyu/article/details/113868873