蓝桥杯17年最长正则结果

题目:

考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。

例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。

输入

一个由x()|组成的正则表达式。输入长度不超过100,保证合法。

输出

这个正则表达式能接受的最长字符串的长度。

例如,
输入:
        ((xx|xxx)x|(x|xx))xx

程序应该输出:
        6

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。

要点:

一般看到正则匹配或者括号匹配都要用到栈结构,通过(和)决定操作

import java.util.Stack;

public class Solution {

    public static void main(String[] args) {
        
        String string = "((xx|xxx)x|(x|xx))xx";
        
        Stack<Character> stack = new Stack<>();
        
        for (int i = 0; i < string.length(); i++) {
            //找到)开始计算 并往回找到与其对应的(
            if (string.charAt(i) == ')')
            {
                String a = "";

                while (stack.peek() != '(')
                    a += stack.pop();

                int maxLength = getMaxLength(a);
                //拿到(xx|xxx)里面的xxx并push回去继续完成下面的计算
                for (int j = 0; j < maxLength; j++)
                    stack.push('x');

            }

           else stack.push(string.charAt(i));

        }

        String last = "";

        while (!stack.isEmpty()) last+=stack.pop();

        System.out.println(getMaxLength(last));
    }
    //计算xx|xxx的情况
    public static int getMaxLength(String str){
        int Max = -1;
        //注意 | 是属于特殊字符,需要加上\\去告诉系统这个是特殊字符(正则),才可以吧两边x从|分开,^那些也如此!
        String[] result = str.split("\\|");
        
        for (int j = 0; j < result.length; j++)
            Max = Math.max(result[j].toCharArray().length,Max);

        return Max;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,706评论 0 4
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 4,804评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,876评论 1 32
  • 五月天,是玫瑰的季节。在云南这个没有四季之分的地方更是花的世界,玫瑰只不过是在这一季里做了头把花魁。不过在安宁八街...
    清姀一一阅读 4,845评论 7 4
  • 实话生活 体悟人生 炽天堂:怎么样 跟你介绍的博客和微博 感觉如何啊 木风恒:正在玩中 功能比较齐全啊 开放性也好...
    木风恒阅读 1,292评论 0 0

友情链接更多精彩内容