codeforces 723B Text Document Analysis(字符串模拟,)
题目链接:http://codeforces.com/problemset/problem/723/B
题目大意:
输入n,给出n个字符的字符串,字符串由 英文字母(大小写都包括)、 下划线'_' 、括号'(' ')' 组成。【括号不会嵌套】
求括号外面的连续字符串最大的字符串长度和括号内的连续字符串的个数。
举例:
input
37
_Hello_Vasya(and_Petya)__bye_(and_OK)
output
5 4
括号外面的连续的字符串最长的字符串长度为 5 括号内有 4 个连续的字符串。
解题思路:
模拟扫描一遍即可,分为两种情况
1.括号外面的字符串,如果碰到英文字符,则while 循环即可直到不是英文字母,在循环的同时用一个tem记录字符串的长度,找到一个最长的即可。
2.括号里面,如果碰到‘(’ 则进入循环,碰到‘)’退出,在该循环内,如果是英文字母,则统计个数cut++,同时while循环,直到不是英文字母。
以上循环是注意数组尾,简单提一下,自己再写时加了判断,1A.
AC Code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n; 6 char na[255]; 7 while(scanf("%d",&n)!=EOF) 8 { 9 int maxn=0,cut=0; 10 cin>>na; 11 for(int i=0; i<strlen(na); i++) 12 { 13 if(na[i]=='_')continue; 14 if(isalpha(na[i])) 15 { 16 int tem=0; 17 while(isalpha(na[i])&&i<strlen(na)) 18 tem++,i++; 19 maxn=max(maxn,tem); 20 } 21 if(na[i]=='(') 22 { 23 i+=1;//. 24 while(na[i]!=')'&&i<strlen(na)) 25 { 26 if(na[i]=='_') 27 { 28 i++; 29 continue; 30 } 31 if(isalpha(na[i])) 32 { 33 cut++; 34 while(isalpha(na[i])&&i<strlen(na))i++; 35 } 36 } 37 } 38 } 39 printf("%d %d\n",maxn,cut); 40 } 41 return 0; 42 }