日期:2025年8月18日
ZeroJudge 題目連結:c657. 最長連續字母
解題想法
依序讀取字串內容,如果這一個字母與前一個字母相同,連續相同字母長度加1;反之,更新最大值,重設連續相同字母長度為1。讀取完最後一個字母之後, 要再更新一次最大值。
Python 程式碼
使用時間約為 21 ms,記憶體約為 3.3 MB,通過測試。
import sys
for line in sys.stdin:
line = line.strip() # 讀取一行字串
imax, cnt = 0, 1 # 最長連續字母長度,目前的連續字母長度
ans = last = line[0] # 答案對應的字母,目前的字母,預設為 line[0]
for c in line[1:]: # 依序讀取 line[1] ~ line[-1]
if c == last: cnt += 1 # 如果 c 等於 last,cnt 加 1
else: # 如果 c 不等於 last
if cnt > imax: # 如果 cnt 大於 imax
imax = cnt; ans = last # 更新 imax, ans
cnt = 1; last = c # 重設 cnt, last
if cnt > imax: # 最後要再檢查一次
imax = cnt; ans = last
print(ans, imax) # 印出答案
C++ 程式碼
使用時間約為 2 ms,記憶體約為 328 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
string line;
while(cin >> line) { //# 讀取一行字串
int imax = 0, cnt = 1; // 最長連續字母長度,目前的連續字母長度
char ans = line[0], last = line[0]; // 答案對應的字母,目前的字母,預設為 line[0]
for(char c : line.substr(1)) { // 依序讀取 line[1] ~ line[-1]
if (c == last) { // 如果 c 等於 last,cnt 加 1
cnt++;
} else { // 如果 c 不等於 last
if (cnt > imax) { // 如果 cnt 大於 imax
imax = cnt; ans = last; // 更新 imax, ans
}
cnt = 1; last = c; // 重設 cnt, last
}
}
if (cnt > imax) { // 最後要再檢查一次
imax = cnt; ans = last;
}
cout << ans << " " << imax << "\n"; // 印出答案
}
return 0;
}
沒有留言:
張貼留言