查找有效{}()[]的字符串

Mon*_*lal -2 java stack hashmap

如何修复我的代码,以便找到有效的(){} []?现在,它只返回true.

public static boolean isValid(String s){

        HashMap<Character, Character> specialChar= new HashMap<>();
        specialChar.put('{', '}');
        specialChar.put('[',']');
        specialChar.put('(',')');
        Stack<Character> stk = new Stack<>();
        for (int i=0; i<s.length(); i++){

            if (specialChar.keySet().contains(s.charAt(i))){
                stk.push(s.charAt(i));
            }
            else if (specialChar.values().contains(s.charAt(i))){
                if (!stk.empty()) {
                    stk.pop();
                }
            }

        }

        return stk.isEmpty();

    }


 System.out.println(isValid("{}{lll}]"));
Run Code Online (Sandbox Code Playgroud)

rob*_*los 5

我之前做过这个方法,因为这是codewars.com上的一个问题

您有4个条件需要返回false.

  • 关闭一个空的支撑 Stack
  • 闭幕式)和顶部CharacterStack(
  • 闭幕式}和顶部CharacterStack{
  • 闭幕式]和顶部CharacterStack[

    public static boolean isValid(String s) {
        System.out.println(s);
        Stack<Character> st = new Stack<>();
    
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch == '(' || ch == '{' || ch == '[') {
                st.push(ch);
            } else if (ch == ')' || ch == '}' || ch == ']') {
                if (st.isEmpty()) {
                    return false;
                }
                char topChar = st.pop();
                if (ch == ')' && topChar != '(') {
                    return false;
                }
                if (ch == '}' && topChar != '{') {
                    return false;
                }
                if (ch == ']' && topChar != '[') {
                    return false;
                }
            }
        }
        return st.isEmpty();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    运行

    System.out.println(isValid("{}{lll}]"));
    
    Run Code Online (Sandbox Code Playgroud)

    产量:

    {} {lll}]
    false