给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true示例 2:
输入:s = "()[]{}" 输出:true示例 3:
输入:s = "(]" 输出:false提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
java 解题及思路
package com.java.leetcode.stackandqueue;
import java.util.Stack;
/**
* 题目描述:
* 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
*
* 有效字符串需满足:
*
* 左括号必须用相同类型的右括号闭合。
* 左括号必须以正确的顺序闭合。
* 每个右括号都有一个对应的相同类型的左括号。
*
*
* 示例 1:
*
* 输入:s = "()"
* 输出:true
* 示例 2:
*
* 输入:s = "()[]{}"
* 输出:true
* 示例 3:
*
* 输入:s = "(]"
* 输出:false
*
*
* 提示:
*
* 1 <= s.length <= 104
* s 仅由括号 '()[]{}' 组成
*
*/
public class isValid20 {
public static boolean isValid(String s) {
//由题目描述可得 字符串中只包 '(',')','{','}','[',']' 含这几个字符串类型
//对于映射来说 可以利用栈的特性 进行压栈出栈操作
// 遇到左括号 就进栈 ,遇到右括号就出站
Stack<Character> stack=new Stack<>();
char[] arr=s.toCharArray();
for(int i=0;i<arr.length;i++){
if('['==arr[i]|'('==arr[i]|'{'==arr[i]){
stack.add(arr[i]);
}else{
if(stack.isEmpty()){
return false;
}
char c=stack.pop();
if((c=='{'&&arr[i]=='}')||(c=='['&&arr[i]==']')||(c=='('&&arr[i]==')')){
}else{
return false;
}
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
String str="()[]{}";
isValid20.isValid(str);
}
}