2017蓝桥杯省赛---java---A---7(正则问题)
生活随笔
收集整理的這篇文章主要介紹了
2017蓝桥杯省赛---java---A---7(正则问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
考慮一種簡單的正則表達式: 只由 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,否則按無效代碼處理。思路分析
代碼實現
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;//用于保存連續的x的數量while (pos<len){if(s.charAt(pos)=='('){pos++;temp+=f();//等待后面的結果并累加到ans}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);} }總結
以上是生活随笔為你收集整理的2017蓝桥杯省赛---java---A---7(正则问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长期电脑不关机会如何如何让电脑不关机
- 下一篇: 2018蓝桥杯省赛---java---A