第一种算法
用栈来解决:
1.建立一个栈
2.遍历字符串如果是左括号就压栈
3.如果是有括号:判断此时栈是否为空
3.1如果为空则不匹配
3.2如果不为空则弹出一个元素
4.遍历结束后判断栈是否为空:若为空则匹配,不为空不匹配
bool isMatch(string str)
{
//1.建立一个栈
Stack<char> s;
//2.遍历字符串
for(int i=0;i<str.length();i++)
{
//2.1如果当前字符为左括号:将左括号压栈
if(str[i]=='(')
{
s.push(str[i]);
}
//2.2如果当前字符为右括号:
if(str[i]==')')
{
//2.2.1如果为空则返回括号不匹配
if(s.isEmpty()) return false;
//2.2.2如果栈不为空,从栈中弹出一个左括号.
else{
s.pop();
}
}
}
//3.遍历结束后如果栈中为空则返回括号匹配,如果不为空则不匹配
if(s.isEmpty()) return true;
else return false;
}
第二种算法
1.设置一个整数sum初始化为0
2.遍历字符串:如果为左括号则sum++;如果为右括号则sum–
3.遍历结束后如果sum为0则匹配,不为0不匹配
bool ismatch(string str)
{
int sum=0;
for(int i=0;i<str.length();i++)
{
if(str[i]=='(') sum++;
if(str[i]==')') sum--;
}
if(sum==0) return true;
else return false;
}