题目
链接:https://leetcode-cn.com/problems/valid-parentheses
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解题记录
通过对左括号的存储,以及右括号的判断来确定是否为完整的有效的括号序列:
class Solution {
public boolean isValid(String s) {
char[] seq = s.toCharArray();
int len = seq.length;
if(len==0) return true;
if(len%2!=0) return false;
char[] info = new char[seq.length];
int index = 0;
info[0] = seq[0];
for (int i=1; i<len; i++){
if(seq[i]=='('||seq[i]=='['||seq[i]=='{'){
index ++;
info[index] = seq[i];
}else{
if(info[index]!=getPair(seq[i])) return false;
index --;
}
}
return index==-1;
}
public char getPair(char s){
switch(s){
case '(':return ')';
case ')':return '(';
case '[':return ']';
case ']':return '[';
case '{':return '}';
case '}':return '{';
default: return s;
}
}
}
进阶
可以通过ASCII中左右括号之间差值很小作为判断依据
- ( 是 40 ) 是 41
- [ 是 91 ] 是 93
- { 是 123 } 是 125
通过判断差值是不是1或2
class Solution {
public boolean isValid(String s) {
char[] seq = s.toCharArray();
int len = seq.length;
if(len==0) return true;
if(len%2!=0) return false;
char[] info = new char[seq.length];
int index = 0;
info[0] = seq[0];
for (int i=1; i<len; i++){
if(seq[i]=='('||seq[i]=='['||seq[i]=='{'){
index ++;
info[index] = seq[i];
}else{
if(seq[i] - info[index] != 2 && seq[i] - info[index] != 1) return false;
index --;
}
}
return index==-1;
}
}
来源:oschina
链接:https://my.oschina.net/u/4416364/blog/3227485