美文网首页
第八届蓝桥杯 正则问题 Java A组

第八届蓝桥杯 正则问题 Java A组

作者: elijahzheng | 来源:发表于2018-04-02 17:22 被阅读0次

    描述:正则问题

    考虑一种简单的正则表达式:
    只由 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,否则按无效代码处理。

    思路

    1. 将输入都存入数组内 - nextLine.split("")
    2. 字符串判断相等 "".equals("")
    3. 回调深搜

    代码

    import java.util.Scanner;
    
    public class Main {
        static int len = 0;
        static String[] arr;
        public static void main (String args[]) {
            Scanner sc = new Scanner(System.in);
            arr = sc.nextLine().split("");
            
            int re = dfs();
            System.out.println(re);
        }
        
        static int dfs() {
            int result = 0, num = 0;
            
            while(len < arr.length) {
                if (arr[len].equals("(")) {
                    len ++;
                    num = num + dfs();
                }
                else if (arr[len].equals("|")) {
                    len ++;
                    result = num > result ? num : result;
                    num = 0;
                } 
                else if (arr[len].equals(")")) {
                    len ++;
                    break;
                } else {
                    len ++;
                    num ++;
                }
            }
            result = num > result ? num : result;
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:第八届蓝桥杯 正则问题 Java A组

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