给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
示例 3:
输入: "(]" 输出: false
示例 4:
输入: "([)]" 输出: false
示例 5:
输入: "{[]}" 输出: true
============================================
解题思路 : 使用栈思想 , 压入左括号,碰到右括号弹栈对比
为了使算法速度更快,自己用数组实现栈,容量为 s.length()/2
下面是代码
============================================
class Solution {
public boolean isValid(String s) {
int len = s.length();
if (len%2==1) return false;
final char[] stack = new char[len/2];
int stackIdx = stack.length-1;
int p = -1;
char[] chars = s.toCharArray();
for (char cr:chars)
if (cr == '(' || cr == '[' || cr =='{') {
if (p==stackIdx)
return false;
stack[++p]=cr;
}else{
if (p==-1||!chkCr(stack[p],cr))
return false;
p--;
}
return p==-1;
}
private boolean chkCr(char p,char cr){
switch (cr){
case ')': return p=='(';
case '}': return p=='{';
case ']': return p=='[';
default : return false;
}
}
}
很简单的算法