力扣第23题 有效的括号

题目描述:

力扣第23题 有效的括号

 题目描述是 给定一个字符串 判断是否有效 ;

有效 : 左括号必须用相同类型的右括号闭合

             左括号必须以正确的顺序闭合 。

解题思路:

我的想法是 既然 左括号必须以同类型的右括号闭合  且括号就3种 ()【】 {} 所有  使用一个哈希表 以 右边括号为键 以同类型的左边括号为值 即可 然后使用递归算法 使用一种栈结狗 如果遍历的是右边括号 就会把它放进栈结构中  为什么用栈 是因为 先进后出的特点 当遇到左边括号时 会及时取出刚才的右边括号 如果不同 就为false 然后 return掉即可 如果为同类型的 就继续判断 递归即可 

大体死了就是这样 

献上我的思路图 :

力扣第23题 有效的括号

最后附上代码 :

 

package com.code;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;


public class code_16 {
    public static Map<Character  , Character> map = new HashMap<>();
    public static Stack<Character> stack = new Stack<>();
    public static boolean isOK = false ;
    public static void main(String[] args) {
        map.put('(' ,')');
        map.put('[' ,']');
        map.put('{' ,'}');
        String  str = "()[]{}";
        fun(str , 0);
    }
    private static void fun(String str , int i) {
        if (i == str.length() ){
            System.out.println(isOK);
            return;
        }
        if (str.charAt(i) == '(' || str.charAt(i) == '[' || str.charAt(i)=='{'){
            stack.push(str.charAt(i));
        }else {
            if (!stack.empty()){
                if (str.charAt(i) == map.get(stack.pop())){
                    isOK = true ;
                }else {
                    System.out.println(isOK);
                    return;
                }
            }

        }
        fun(str ,i+1);

    }
}

上一篇:【JZ-19】正则表达式匹配(动态规划)


下一篇:680. 验证回文字符串 Ⅱ(双指针)