c++的实现问题
老师我想用c++实现这个问题,但是遇到了一些问题:
如果是"[ ( [ ] [ ] ) ]"这样的例子就无法通过,我debug发现在入栈过程中只有"["成功,紧接着就退出循环,直接进行判断。但是如果我用map来对应判断,例子就顺利通过测试。
1.成功的代码
#include<stdio.h> #include<map> #include<iostream> #include<stack> using namespace std; int main() { string s; getline(cin,s); int len=s.size(); map<char,char> m; m['(']=')'; m['{']='}'; m['[']=']'; stack <char> a; int flag=1; for(int i=0;i<len;i++) { if(s[i]=='(' || s[i]=='{' || s[i]=='[') a.push(s[i]); else if(s[i]==')' || s[i]=='}' || s[i]==']') { if(a.size() && m[a.top()]==s[i]) a.pop(); else { flag=0; break; } } } if(flag && a.size() == 0) printf("yes\n"); else printf("no\n"); return 0;
2.失败的代码
#include <iostream> #include <stack> #include <string> using namespace std; int main(void){ stack<char> s; string str; cin >> str; //push and pop int flag = 1; for(int i = 0;i < str.length(); i++){ //push if(str[i] == '(' || str[i] =='[' || str[i] =='{' ){ s.push(str[i]); }else if(str[i] == ')' || str[i] ==']' || str[i] =='}'){//pop if(s.empty() || ((s.top() =='(' && str[i] != ')') || (s.top() == '[' && str[i] != ']') || (s.top() == '{' && str[i] != '}'))){ flag = 0; break; } s.pop(); } } if(flag == 1 && s.empty()){ cout << "yes\n"; }else { cout << "no\n"; } return 0; }
45
收起
正在回答 回答被采纳积分+1
2回答
我是没有昵称
2021-03-29 21:39:00
// 你参考一下我的代码,然后debug一下你的代码,我估计是pop的时机不对
// 循环时碰到非各种括号的字符,直接跳过即可
#include <iostream>
#include <string>
#include <stack>
using namespace std;
class Solution
{
public:
static bool isValid(string s)
{
stack<char> myStack;
for (int i = 0; i < s.length(); i++)
{
char c = s[i];
if (c == '(' || c == '[' || c == '{')
myStack.push(c);
else if (c == ')' || c == ']' || c == '}')
{
if (myStack.empty())
return false;
char topChar = myStack.top();
myStack.pop();
if (c == ')' && topChar != '(')
return false;
if (c == ']' && topChar != '[')
return false;
if (c == '}' && topChar != '{')
return false;
}
}
return myStack.empty();
}
};
int main()
{
string s1 = "{ $$ ( [ ] ) } ";
string s2 = "{$( [] } )";
cout << Solution::isValid(s1) << endl;
cout << Solution::isValid(s2) << endl;
}
liuyubobobo
2020-10-06 13:03:41
你再问题描述中的那个括号字符串中有大量的空格,所以导致了返回 No
我测试你的程序使用这个输入是没有问题的:
[([][])]
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星