對于只出現(xiàn)一種括號的字符串,看這個字符串中的括號是否匹配 以及 匹配的個數(shù):
一般來說有兩種匹配方式:
例如: (()()())
第一種匹配是此字符串有4組括號對匹配完成
第二種匹配是此字符串有3組括號對匹配完成
對于第一種匹配方式:有兩種選擇:棧或者直接循環(huán):
但是,顯然,我覺得沒必要使用棧,大材小用
#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;
}
對于第二種括號匹配的方式:就很簡單了:
觀察發(fā)現(xiàn):必須得是左右兩個括號緊密挨在一起,那就直接for循環(huán)判定?文章來源:http://www.zghlxwxcb.cn/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;
}
對于不同類型的括號,如何匹配,匹配的個數(shù):(力扣 20 有效的括號)
20. 有效的括號 - 力扣(LeetCode)文章來源地址http://www.zghlxwxcb.cn/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;
}
};
到了這里,關(guān)于關(guān)于括號的一系列問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!