01 对称匹配问题(总元素必为偶数个)

Posted SSS翱翔万里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01 对称匹配问题(总元素必为偶数个)相关的知识,希望对你有一定的参考价值。

不会题目的思路总结

01 对称匹配问题(总元素必为偶数个)

思想:

  1. 当读取遇到左边部分(对称轴左边),就把相应的右边部分内容压栈进去,
  2. 当读取遇到右边部分,则进行弹栈进行相等比较处理(与右边部分内容)
  3. 当读取完时所有元素时,栈中无元素时,则代表所求的东西是对称的符合匹配规律的,
  4. 若中途栈为空或者弹栈比较的结果为false,那么东西必然是不符合对称的

注意:以"[]"(对称图形),则左边部分内容(对称轴左边)为"[",右边部分内容(对称轴右边)为"]"

实例:b站基础面试题-----括号匹配问题(对称的)

技术图片

public class Solution01 {
    public static void main(String[] args) {
        Scanner  scanner=new Scanner(System.in);
        System.out.println("请输入要判断的字符串");
        System.out.println(isPairs(scanner.next()));
    }    //利用栈先进后出的原理,括号匹配也是后面进去的先匹配)
    public static boolean isPairs(String string) {
        if (string.length() % 2 != 0) {
            //奇数必然不匹配
            return false;
        }
        //利用栈先进后出的原理,每遇到左括号,就压进去(push)对应的右括号,然后遇到右括号就进行弹栈
        //                    若所有的弹栈都和对应的右括号的一致,就返回true,否则返回false
        Stack<Character> stack = new Stack();//定义一个栈,利用泛型限定压栈的内容
        char[] chars = string.toCharArray();//为压栈做准备
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ‘{‘) {
                stack.push(‘}‘);
            } else if (chars[i] == ‘[‘) {
                stack.push(‘]‘);
            } else if (chars[i] == ‘(‘)
                stack.push(‘)‘);
            else if (stack.isEmpty() || chars[i] != stack.pop()) {
                //栈空该次代表着遇到的就是结束符号
                //如果弹出的栈与遇到的右括号不相等,也是返回false;
                return false;
            }
        }
        //如果遍历完所有的字符数字元素,都未返回false,那么栈必然为空
        return stack.isEmpty();
    }

以上是关于01 对称匹配问题(总元素必为偶数个)的主要内容,如果未能解决你的问题,请参考以下文章

线性表练习之Example037-判断带头节点的循环双链表是否对称

一般图匹配

匹配所有索引值为偶数/奇数的元素,从 0 开始计数

从 JSON 数组拼接或删除元素列表,仅删除偶数项而不是匹配项

检查列表中的偶数,并在 Scala 中获得类型不匹配 [重复]

对称序列判断