题目描述是 给定一个字符串 判断是否有效 ;
有效 : 左括号必须用相同类型的右括号闭合
左括号必须以正确的顺序闭合 。
我的想法是 既然 左括号必须以同类型的右括号闭合 且括号就3种 ()【】 {} 所有 使用一个哈希表 以 右边括号为键 以同类型的左边括号为值 即可 然后使用递归算法 使用一种栈结狗 如果遍历的是右边括号 就会把它放进栈结构中 为什么用栈 是因为 先进后出的特点 当遇到左边括号时 会及时取出刚才的右边括号 如果不同 就为false 然后 return掉即可 如果为同类型的 就继续判断 递归即可
大体死了就是这样
献上我的思路图 :
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); } }