自学内容网 自学内容网

LC刷题专题:队列、双端队列、栈


这个专题记录自己刷题过程中遇到的与队列有关的题目

1190. 反转每对括号间的子串

题目链接及描述
https://leetcode.cn/problems/reverse-substrings-between-each-pair-of-parentheses/description/
在这里插入图片描述
看到成对的括号,首先联想到的就是使用栈,当遇到“)”时从栈中弹出元素,直至遇到“(”为止,将弹出的字符组成的字符串进行反转操作。普通实现思路按照上面描述。
我进一步思考觉得每次都将单个字符入栈,并且遇到左括号后需要从栈中一个个弹出当前元素并构成字符串,对其进行反转操作,执行反转后需要再次遍历字符串并将其对应元素入栈。这个过程中涉及到大量遍历字符串取字符的操作。
我考虑将栈中存储字符的操作更改为栈中直接存储的就是字符串。 定义字符串cur表示当前尚未入栈的字符串,当遇到右括号“)”时,将当前字符串反转,反转后需要考虑更新当前字符串cur,如果栈顶字符串为左括号“()”则,此时不需要更新字符串,继续向后遍历,如果当前栈顶字符串不为左括号。则将栈顶字符串弹出并将cur连接在其后组成新的字符串cur。注意细节看代码:

class Solution {
    public String reverseParentheses(String s) {
        Stack<String> st = new Stack<>();
        String cur = "";
        for(char ch : s.toCharArray()){
            if(ch == '('){
                // 遇到右括号,需要将右括号前面的内容入栈,并且需要将右括号入栈
                // 右括号入栈主要是为了和左括号匹配,防止出现多个括号中间没有内容导致不匹配的反转
                // "((eqk((h))))"
                if(cur != ""){
                    st.push(cur);
                    cur = "";
                }
                st.push('(' + "");
            }else if(ch == ')'){
                // 遇到左括号,首先将对应的右括号从栈中弹出,随后反转字符串。
                if(!st.isEmpty() && st.peek() == "("){
                    st.pop();
                }
                cur = reverseString(cur);
                // 字符串反转后需要判断当前栈顶元素是否为右括号,如果是,继续操作,不是需要将当前栈顶元素弹出和当前cur共同组成下一个反转字符串
                if(!st.isEmpty() && st.peek() != "("){
                    cur = st.pop() + cur;
                }
            }else{
                cur += ch;
            }
        }
        return cur;
    }
    public String reverseString(String s){
        String ans = "";
        for(int i = 0; i < s.length(); i++){
            ans = s.charAt(i) + ans;
        }
        return ans;
    }
}

649. Dota2 参议院

参考博客连接:https://blog.csdn.net/weixin_45863010/article/details/139611145

735. 小行星碰撞

参考博客链接:https://blog.csdn.net/weixin_45863010/article/details/139513329

901. 股票价格跨度

参考博客链接:https://blog.csdn.net/weixin_45863010/article/details/139250873


原文地址:https://blog.csdn.net/weixin_45863010/article/details/142743931

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!