leetcode题目8
题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解题思路
查ascii码表发现:匹配的小括号差为1,匹配的中括号和大括号差为2,想到可以用ascii码来解决问题,匹配到括号就把这两个位置上的括号消除,如果最后字符串为空,则匹配成功,否则匹配失败
代码
class Solution {
public:
bool isValid(string s) {
int i=0;
while(i<s.length())
{
if(s[i+1]-s[i]==1||s[i+1]-s[i]==2)//寻找匹配括号
{
s.replace(i,2,"");//将从i开始的一对匹配括号用“”代替
if(i>0) i--;//左边还有未匹配的括号,i--
}
else
{
i++;//找不到,i++;
}
}
if(s!="") return false;
else return true;
}
};