第一种情形:
String str1 = "{({}[])}"; //true
String str2 = "([]([{}]))"; //true
String str3 = "[({[}])]"; //false
String str = "{(})]"; //false
代码实现:
package com.company;
import java.util.Stack;
public class Main {
public static void main(String[] args){
String string="(){()}[}}}";
System.out.println(tfString(string));
}
public static boolean tfString(String string){
Stack<String> left=new Stack<String>();
if(string.length()%2!=0){
return false;
}
while (!string.isEmpty()){
//取字符串首字母
String character=string.substring(0,1);
//剩余的字符串
string=string.substring(1);
if(character.equals("{")||character.equals("[")||character.equals("(")){
//如果是左括号,则压入栈
left.push(character);
}else if(character.equals(")")||character.equals("]")|| character.equals("}")){
//首先检查栈是否为空
if(left.isEmpty())
return false;
//弹出最后的左括号
String leftChar=left.pop();
//检查左右括号是否匹配
if(character.equals(")")){
if(!leftChar.equals("("))
return false;
}else if(character.equals("]")){
if(!leftChar.equals("["))
return false;
}else if(character.equals("}")){
if(!leftChar.equals("{"))
return false;
}
}
}
//栈中没有有左括号
return left.isEmpty();
}
}
第二种情形:
"()[]{}" true
"([)]" false
代码实现:
package alg;
import java.util.Stack;
public class StringValid {
public boolean isValid(String s) {
if (s == null) return false;
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if(c=='('){
stack.push(')');
}else if(c=='['){
stack.push(']');
}else if(c=='{'){
stack.push('}');
}else if(stack.isEmpty() || stack.pop()!=c){
return false;
}
}
return stack.isEmpty();
}
}