題意#
題目會給我們一串 DNA 序列(也就是由 A、C、G、T 組成的字串)。
我們要找出這個字串裡面,連續出現同樣字元的最長長度是多少。
思路#
這題其實是很經典的序列掃描問題。我們只要從頭到尾把字串看過一遍就可以了。
這中間只要維護兩個數字:一個紀錄目前這個字元連續出現了幾次,另一個紀錄歷史最大值。
在遍歷的時候,如果現在的字元跟前一個一模一樣,連續次數就加一;如果不一樣,代表換字元了,就把連續次數重置為 1。
每看一個字元就順手更新一下最大值,整個迴圈跑完答案自然就出來了。
程式碼#
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define INF LONG_LONG_MAX/1000
#define WA() cin.tie(0)->sync_with_stdio(0)
#define all(x) (x).begin(), (x).end()
#define int long long
#define PII pair<int, int>
signed main() { WA();
string s;
cin >> s; // 讀取 DNA 序列字串
int cnt = 1, mx = 1; // cnt 紀錄目前連續字元的長度,mx 紀錄歷史最大連續長度
// 從第二個字元開始遍歷整個字串
for (int i = 1; i < s.size(); i++) {
if (s[i] == s[i-1]) cnt++; // 如果當前字元與前一個相同,連續長度加 1
else cnt = 1; // 如果不同,重置連續長度為 1
mx = max(mx, cnt); // 隨時更新歷史最大連續長度
}
cout << mx; // 輸出最長連續長度
}
