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

描述:正则问题

考虑一种简单的正则表达式:
只由 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组)