给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
我用普通方法模拟官方的出入栈法(出入栈法具体看leetcode官方的介绍),创建动态空间arr模拟栈区,用循环进栈,但数组不能出栈,只能将数组的指针向前一个单位模拟出栈。因此需要用count来记录出栈次数从而判断是否全部出栈进一步证明字符串有效。
bool isValid(char * s){
int L = strlen(s);
int j = 0;
int count = 0;
int *arr = (int*)malloc(L*sizeof(int));
if (arr == NULL)
return 0;
arr[0] = (int)s[0];
if (L % 2 != 0)
return false;
for (int i = 0; i < L - 1; i++)
{
if ((((int)s[i + 1]) - (arr[j]) < 3) && ((int)s[i + 1]) - arr[j] > 0)
{
if(j>0)
j--;
count++;
}
else
{
j++;
arr[j] = (int)s[i + 1];
}
}
if (count == (L / 2))
return true;
else
return false;
}