题目描述:
题目描述是 给定一个字符串 判断是否有效 ;
有效 : 左括号必须用相同类型的右括号闭合
左括号必须以正确的顺序闭合 。
解题思路:
我的想法是 既然 左括号必须以同类型的右括号闭合 且括号就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);
}
}