给定一个只包括‘(’,‘)’,‘[’,‘]’,‘{’,‘}’的字符串,判断字符串是否有效。
思路1:
利用栈,是前一半括号的,入栈,是后一半括号的,判断栈顶元素是不是和它相匹配,是则出栈;不是返回false。
遍历完整个字符串后,判断栈是否为空,空则返回true;非空则返回false。
思路2:
和思路1一样的思路,不利用栈了,只是换成在原字符串上操作。
用一个变量,模拟栈顶指针。
代码如下:
class Solution {
public:
bool isValid(string s) {
int i=-1,j=0;//i为模拟栈顶指针,初始化为-1,表示空栈
int len=s.length();
int arr[128];
arr['(']=1;
arr['[']=2;
arr['{']=3;
arr[')']=-1;
arr[']']=-2;
arr['}']=-3;
while(j<len)
{
if(arr[s[j]]>0) s[++i]=s[j];//i为模拟栈顶指针
else
{
if(i>=0&&arr[s[j]]+arr[s[i]]==0)
{
i--;
}
else return false;
}
j++;
}
if(i==-1) return true;//空栈
else return false;
}
};