熱門文章

2025年8月18日 星期一

ZeroJudge 解題筆記:c657. 最長連續字母

作者:王一哲
日期: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;
}


沒有留言:

張貼留言