有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
一、数组
1、空字符串可被认为是有效字符串,单独判断
3、字符串的长度必须为偶数,否则不是有效括号
2、利用替换的思想
(1)如果() [] {} 成对出现,用”“替换,相当于删除
(2)剩下的,如果有成对的,继续替换
(3)重复length/2次后,用isEmpty()判断。为空,是有效字段
否则,不是有效字段
public static boolean isValid(String s) {
//创建Stack对象
//Stack<Character> stack = new Stack<Character>();
int count=0;
int length=s.length();
//当s的长度为偶数(0和其他偶数)时,才有可能为有效括号
if(length%2==0){
if(s.isEmpty())
return true;
else{
/*对s进行替换,将成对的(){} [] 替换成"",其实就是把它们从数组中删除;
* 如果满足条件,继续进行替换,知道循环结束*/
while (count<length/2){
s=s.replace("()","").replace("{}","").replace("[]","");
count++;
}
//如果替换后,s的长度还大于0,意味着存在着不成对的括号无法替换,这时,不是有效括号
if(s.length()>0)
return false;
return true;
}
}
return false;
}
二、栈
1、空字符串可被认为是有效字符串,单独判断
2、首先,利用chatAt()将字符串传入栈stack中
3、利用for循环,一个字节一个字节逐个判断
(1)若第一个为 ( [ } 其中一个,利用push()传入到stack1中
(2)若第二个字节为或者stack.peek()为配对的 ) ] } ,stack1.pop()
(3)继续判断
4、若为有效括号,stack1为空;否则,不为空
public static boolean isValid(String s) {
Stack stack = new Stack();
Stack stack1 = new Stack();
//将s中的字符传入栈中
for (int i = 0; i < s.length(); i++) {
stack.push(s.charAt(i));
}
if(s.isEmpty()){
return true;
}
else{
for (int i = 0; i < s.length()-1; i++) {
char c = s.charAt(i);
char c1= s.charAt(i+1);
if (c == '(' || c == '[' || c == '{') {
stack1.push(c);
if (c == '(' && ( stack.peek() == ')' || c1==')' ) ){
stack1.pop();
}
if (c == '[' && (stack.peek() == ']' || c1==']' )){
stack1.pop();
}
if (c == '{' && (stack.peek() == '}' || c1=='}' )){
stack1.pop();
}
}
}
return stack1.isEmpty();
}