美文网首页
code - 字符的有效匹配

code - 字符的有效匹配

作者: BestFei | 来源:发表于2020-04-13 20:48 被阅读0次

    Q:给定一个含有'(', ')', '{', '}', '[' 和']'字符串,判断这些符号是否语法匹配
    A:
    本题用栈来实现。
    首先科普一下栈的几个方法:
    1、实例化 Stack stack=new Stack();
    2、判断是否为空 stack.empty()
    3、取栈顶值(不出栈) stack.peek()
    4、进栈 stack.push(Object);
    5、出栈stack.pop();

    解法:
    1、首先定义一个map,将左右对应的符号,分别作为key和value存入。
    2、依次去读取字符串中的每一个字符,如果是左边的字符,则加入栈。
    3、如果读入的字符是右边的符号,则判断栈是否为空,且栈顶的字符是否是对应的左边字符,如果都满足,则将栈顶的字符取出;否则,就表示字符串不匹配。
    4、依次全部读取字符串,如果此时栈是空的,则表示字符串全部都匹配;否则就表示不匹配。

    package suanfa;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Stack;
    
    public class StackExe {
    
        public static boolean isValid(String s) {
            if (s == null || s.length() % 2 == 1) {
                return false;
            }
            HashMap<Character, Character> map = new HashMap<Character, Character>();
            map.put('(', ')');
            map.put('[', ']');
            map.put('{', '}');
            Stack<Character> stack = new Stack<Character>();
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if (map.keySet().contains(c)) {
                    stack.push(c);
                } else if (map.values().contains(c)) {
                    if (!stack.empty() && map.get(stack.peek()) == c) {
                        stack.pop();
                    } else {
                        return false;
                    }
                }
            }
            return stack.empty();
        }
    
        public static void main(String[] args) {
            ArrayList<String> arrayList = new ArrayList<>();
            arrayList.add("[]{}{}()");
            arrayList.add("{[()]}");
            arrayList.add("{[(])}");
            arrayList.add("{[([)]}");
    
            for (int i =0 ;i<arrayList.size();i++){
                System.out.println(arrayList.get(i)+" is "+ isValid(arrayList.get(i)));
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:code - 字符的有效匹配

          本文链接:https://www.haomeiwen.com/subject/dvqomhtx.html