描述:正则问题
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
例如,
输入: ((xx|xxx)x|(x|xx))xx
程序应该输出: 6
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。
例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。
输入
----一个由x()|组成的正则表达式。输入长度不超过100,保证合法。
输出
---- 这个正则表达式能接受的最长字符串的长度。例如,
输入: ((xx|xxx)x|(x|xx))xx
程序应该输出: 6
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
思路:
import java.util.Scanner;
import java.lang.Math;
public class Main {
static String str;
static int pos,len;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
str = sc.next();
int ans = 0 ;
len = str.length();
pos=0;
ans =dfs();
System.out.print(ans);
}
public static int dfs(){
int num = 0,res = 0;
while(pos < len)
{
if(str.charAt(pos) == '(')
{
pos++;
num+=dfs();
}
else if(str.charAt(pos) == ')')
{
pos++;
break;
}
else if(str.charAt(pos) == '|')
{
pos++;
res = Math.max(num, res);
num =0;
}
else
{
pos++;
num++;
}
}
res = Math.max(num, res);
return res;
}
}