题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
小知识:
1. java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.
2. java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.
3. java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看
题解:
方法一:使用栈。
package test;
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
if(s.isEmpty())
return true;
Stack<Character> stack= new Stack<>();//stack也是集合,也可以用泛型
for(char c:s.toCharArray()){//s.toCharArray()!s.toCharArray()!s.toCharArray()!
if(c=='(')
stack.push(')');
else if(c=='{')
stack.push('}');
else if(c=='[')
stack.push(']');
else if(stack.empty()||c!=stack.pop())
return false;
}
if(stack.empty())
return true;
return false;
}
}
public class Main{
public static void main (String []args){
String s = new String("{()}}}");
Solution p = new Solution();
boolean b = p.isValid(s);
System.out.println("结果:"+b);
}
}
方法二:暴力解法:
字符串中有效的括号有两种:
嵌套的如:
{ ( [ { } ] ) }
并排的如:
( ) { } [ ] ( )
还有两种复合的:
{ ( ) } [ ( { } ) ]
思路:
首先括号成对出现,奇数的一定不符合。
然后每次消去一个最小的完整括号,如果全部消除,说明是有效括号,如果replace之后字符串不发生变化且长度不为0,说明不是有效括号。
package test;
class Solution {
public boolean isValid(String s) {
String s1 = s;
if (s.length() % 2 != 0) {
return false;
}
while (s.length() != 0) {
s = s.replace("{}", "");
s = s.replace("()", "");
s = s.replace("[]", "");
if (s == s1) {
return false;
}
s1 = s;
}
return true;
}
}
public class Main{
public static void main (String []args){
String s = new String("{([{}])}");
Solution p = new Solution();
boolean b = p.isValid(s);
System.out.println("结果:"+b);
}
}