Time Limit: 2 sec / Memory Limit: 1024 MB
Score :
200
points
Problem Statement
You are given a string
S
consisting of uppercase English letters. Find the length of the longest ACGT string that is a substring (see Notes) of
S
.
Here, a ACGT string is a string that contains no characters other than A, C, G and T.
Notes
A substring of a string
T
is a string obtained by removing zero or more characters from the beginning and the end of
T
.
For example, the substrings of ATCODER include TCO, AT, CODER, ATCODER and (the empty string), but not AC.
Constraints
S
is a string of length between
1
and
10
(inclusive).
Each character in
S
is an uppercase English letter.
Input
Input is given from Standard Input in the following format:
S
Output
Print the length of the longest ACGT string that is a substring of
S
.
Sample Input 1
Copy
ATCODER
Sample Output 1
Copy
3
Among the ACGT strings that are substrings of ATCODER, the longest one is ATC.
Sample Input 2
Copy
HATAGAYA
Sample Output 2
Copy
5
Among the ACGT strings that are substrings of HATAGAYA, the longest one is ATAGA.
Sample Input 3
Copy
SHINJUKU
Sample Output 3
Copy
0
Among the ACGT strings that are substrings of SHINJUKU, the longest one is (the empty string).
就是查找连续是AGCT(可变序)的最大值;
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<string>
using namespace std;
int main() {
string s;
while (cin >> s) {
int length = s.length();
int left = 0;
int right = 0;
int count = 0;
int max_left = 0;
int max_right = 0;
int max=0;
s[length] = 'Q';//保证会跑else if,不然会好麻烦
for (int i = 0; i <= length; i++) {
if (s[i] == 'A' || s[i] == 'G' || s[i] == 'C' || s[i] == 'T') {
right++;
}
else {
if (right - left > max) {
max = right - left;
max_left = left;
max_right = right;
}
right++;//要先++再赋值相等
left = right;
}
}
max = max_right - max_left;
cout << max << endl;
}
}