题解28 | 知否知否,应是栈空字走#有效括号序列#

有效括号序列

https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

class Solution {
public:
    bool isValid(string s) {
        // write code here
        stack<char> str;
        //期有佳人配才智 待到花开烂漫时
        for( int i = 0; i < s.length(); i++){
            if(s[i] == '('){
                str.push(')');
            }
            else if(s[i] == '['){
                str.push(']');
            }
            else if(s[i] == '{') {
                str.push('}');
            }//这个得先判空,防止上来就是个右括号
            else if(str.empty()){
                return false;
            }//知否知否,应是栈空字走。
            else if(str.top() == s[i]){
                str.pop();
            }
        }
        return str.empty();
    }
};

基本思想:

该算法使用栈来判断输入的字符串是否有效。

遍历输入的字符串,如果遇到左括号,则将对应的右括号入栈;

如果遇到右括号,则判断栈顶元素是否与当前右括号相同,

如果相同则出栈,否则返回false。

最后判断栈是否为空,如果为空则表示输入的字符串有效,否则表示字符串无效。

时间复杂度:

遍历输入字符串需要O(n)的时间,其中n为字符串的长度。

空间复杂度:

使用了一个栈来存储括号,最坏情况下需要存储n/2个左括号,因此空间复杂度为O(n)。

2024考研数据结构 文章被收录于专栏

本人考研刷算法题,立此专栏练习强化。

全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务