小米秋招题,遇到错误,无法排解,请求各位大佬帮助
题目:给定一个字符串str,判断是不是整体有效的括号字符串(整体有效:即存在一种括号匹配方案,使每个括号字符均能找到对应的反向括号,且字符串中不包含非括号字符)。
链接:https://www.nowcoder.com/questionTerminal/769abd985f3849d0b9415b082f94c192
来源:牛客网
来源:牛客网
输入描述:
输入包含一行,代表str(1≤lengthstr≤105)( 1 \leq length_{str} \leq 10^5)(1≤lengthstr≤105)。
输出描述:
输出一行,如果str是整体有效的括号字符串,请输出“YES”,否则输出“NO”。
示例1
输入
(())
输出
YES
示例2
输入
()a()
输出
NO
说明
()a()中包含了 ‘a’,a不是括号字符
备注:
时间复杂度O(n)O(n)O(n),额外空间复杂度O(1)O(1)O(1)我的答案是:
#include<iostream> #include<stack> #include<string> using namespace std; string str_yes_or_no(string str) { stack<char> s; for (int i = 0; i < str.length(); i++) { if (str[i] =='(') { s.push(str[i]); } else if (str[i] == ')') { if(s.top() == '(') { s.pop(); } else { s.push(str[i]); } } else { return "NO"; } } if (s.empty()) { return "YES"; } else { return "NO"; } } int main() { string str; cin >> str; cout << str_yes_or_no(str) << endl; return 0; }
这个通过不了,请问是哪里错误?