对于只出现一种括号的字符串,看这个字符串中的括号是否匹配 以及 匹配的个数:
一般来说有两种匹配方式:
例如: (()()())
第一种匹配是此字符串有4组括号对匹配完成
第二种匹配是此字符串有3组括号对匹配完成
对于第一种匹配方式:有两种选择:栈或者直接循环:
但是,显然,我觉得没必要使用栈,大材小用
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
string ss="(()())";
int num=0;
cout<<ss<<endl;
for(int i=0;i<ss.size();i++)
{
if(ss[i]=='(') num++;
if(ss[i]==')') num--;
if(num<0) break;
}
if(num==0) cout<<"true"<<endl; //可能剩余左括号没有被匹配上 (() 也要考虑到
else cout<<"false"<<endl;
}
第二种:栈
bool judge(string ss)
{
stack<char>sta;
for(int i=0;i<ss.size();i++)
{
if(ss[i]=='(') sta.push('(');
else
{
if(sta.size()>0 && sta.top()=='(') sta.pop();
else
{
sta.push(')');
break;
}
}
}
if(!sta.size()) return true;
else return false;
}
对于第二种括号匹配的方式:就很简单了:
观察发现:必须得是左右两个括号紧密挨在一起,那就直接for循环判定 文章来源:https://www.toymoban.com/news/detail-502532.html
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
string ss="(()())()(())";
int num=0;
for(int i=1;i<ss.size();i++)
{
if(ss[i]==')' && ss[i-1]=='(') num++;
}
cout<<num<<endl;
}
对于不同类型的括号,如何匹配,匹配的个数:(力扣 20 有效的括号)
20. 有效的括号 - 力扣(LeetCode)文章来源地址https://www.toymoban.com/news/detail-502532.html
class Solution {
public:
bool isValid(string s) {
stack<char>sta;
for(int i=0;i<s.size();i++)
{
if(sta.size()>0)
{
if(s[i]==']' && sta.top()=='[' ||
s[i]==')' && sta.top()=='(' ||
s[i]=='}' && sta.top()=='{' )
sta.pop();
else
sta.push(s[i]);
}
else
sta.push(s[i]);
}
if(!sta.size()) return true;
else return false;
}
};
到了这里,关于关于括号的一系列问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!