题目描述
考虑一种简单的正则表达式:
只由 x ( ) | 组成的正则表达式。
小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ( ( xx| xxx) x| ( x| xx) ) xx 能接受的最长字符串是: xxxxxx,长度是6 。输入
-- --
一个由x ( ) | 组成的正则表达式。输入长度不超过100 ,保证合法。 输出
-- --
这个正则表达式能接受的最长字符串的长度。 例如,
输入:
( ( xx| xxx) x| ( x| xx) ) xx 程序应该输出:
6 资源约定:
峰值内存消耗(含虚拟机) < 256 M
CPU消耗 < 1000 ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入. . . ” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package 语句。不要使用jdk1. 7 及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。
思路分析
代码实现
package TEST; import java. util. Scanner;
class Main { public static int len; public static int pos; public static String s; public static void main ( String[ ] args) { Scanner scanner = new Scanner ( System. in) ; s= scanner. nextLine ( ) ; len= s. length ( ) ; int ans= f ( ) ; System. out. println ( ans) ; scanner. close ( ) ; } public static int f ( ) { int ans= 0 ; int temp= 0 ; while ( pos< len) { if ( s. charAt ( pos) == '(' ) { pos++ ; temp+= f ( ) ; } else if ( s. charAt ( pos) == 'x' ) { pos++ ; temp++ ; } else if ( s. charAt ( pos) == '|' ) { pos++ ; ans= Math. max ( ans, temp) ; temp= 0 ; } else if ( s. charAt ( pos) == ')' ) { pos++ ; return Math. max ( ans, temp) ; } } return Math. max ( ans, temp) ; }
}