B - ATCoder----Atcode

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;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44231195/article/details/89224696