今天运气不错,cses网站进得去,那今天就讲一讲cses的题目吧(第四堂体育课求雨失败 我来电脑老师这逃课了 傻逼的体育老师想累死我们)
先上题目!
- time limit: 1.00 s
- Memory limit: 512 MB
You are given a DNA sequence: a string consisting of characters A, C, G, and T. Your task is to find the longest repetition in the sequence. This is a maximum-length substring containing only one type of character.
Input
The only input line contains a string of nn characters.
Output
Print one integer: the length of the longest repetition.
Constraints
- 1≤n≤10^6
Example
Input:ATTCGGGA
Output:3
题目翻译
时间限制:1.00 s
内存限制:512mb
你有一个DNA序列:一个由字符A, C, G和t组成的字符串。你的任务是找出序列中最长的重复。这是只包含一种字符类型的最大长度子字符串。
输入
唯一的输入行包含一个n个字符的字符串。
输出
打印一个整数:最长重复的长度。
约束
1≤n≤106
例子
输入:
ATTCGGGA
输出:
3.
有道比百度翻译好用多了
思路
这道题应该是属于字符串处理这一类的,但这道不使用字符串读入,用字符数组读入,如果读入的和上一个字符一样,就sum++;如果不一样,就判断是否为最长,然后sum = 1
本蒟蒻语文不好,无法很好的组织语言描述思路,看不懂的看代码吧
这里有一个细节,就是我们不知道字符串的长度,所以我们用while(cin >> a)来判断。这可能在window环境下不好调试,竹子记得好像有一个快捷键可以手动停止输入的来着,但是竹子
忘了
上代码!
#include <bits/stdc++.h>//ÍòÄÜÍ·
using namespace std;
int sum = 1, ma = -1;//Êý×鶨ÒåµÄλÖÃûÓÐʲôҪÇ󣬰´¸öÈËϲºÃÀ´
int main(){
char a, b;
while(cin >> a){
if(a == b){
sum++;
}else{
ma = max(sum, ma);
cout << ma << endl;
sum = 1;
b = a;
}
}
cout << ma << endl;
return 0;
}
注释我打的时候是中文的,不知道为什么会变成这样……