LeetCode/串的查找、匹配、模拟操作

一. 串的查找

1. 最长回文子串(中心扩散/动态规划)

2. 最长无重复子串(双指针)

3. 最长公共前缀(暴力)

4. 串联所有单词的子串(滑动窗口)

5. 分割回文串

二. 串的匹配

1. 有效的括号(栈)

class Solution {
public:
    bool isValid(string s) {
        unordered_map<char,char> m;
        m[')']='(';
        m[']']='[';
        m['}']='{';
        stack<char> stack_;
        for(auto c:s){
            if(c=='('||c=='['||c=='{')
                stack_.push(c);
            else if(stack_.empty()||m[c]!=stack_.top())
                return false;
            else stack_.pop();
        }
        if(stack_.empty()) return true;
        return false;
    }
};

2. 删除最外层括号(栈)

class Solution {
public:
    string removeOuterParentheses(string s) {
        string res;
        stack<char> st;//使用栈来判断是否是最外层,最外层抵消后会使得栈为空
        for (auto c : s) {
            if (c == ')')
                st.pop();//右括号抵消一个左括号
            if (!st.empty()) 
                res.push_back(c);//抵消后栈不为空说明不是最外层,加入结果
            if (c == '(') 
                st.emplace(c);//左括号入栈
        }
        return res;
    }
};

3. 正则表达式匹配(动态规划)

4. 最长有效括号

三. 串的模拟操作

1. 编辑距离(动态规划)

2. 字符串解码(栈)

3. 单词替换(String流)

4. 外观数列

5. 简化路径

四. 正则表达式

posted @ 2022-05-16 08:27  失控D大白兔  阅读(16)  评论(0编辑  收藏  举报