Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Ký tự lặp liên tiếp nhiều nhất trong chuỗi C++

Cho chuỗi ký tự. Tìm ký tự có chuỗi lặp liên tiếp (consecutive repetition) dài nhất.

Ví dụ

Input: "abbbabbbbcdd" → Output: 'b' (lặp 4 lần liên tiếp)
Input: "aabbcdeeeeed" → Output: 'e' (lặp 5 lần liên tiếp)

Thuật toán

  • Duyệt chuỗi từ trái sang phải.
  • Giữ curChar, curLen (độ dài chuỗi lặp hiện tại), maxChar, maxLen.
  • Nếu s[i] == s[i-1]: curLen++.
  • Khác: reset curLen = 1, curChar = s[i].
  • Cập nhật maxLen, maxChar khi curLen > maxLen.

Chương trình C++

#include <bits/stdc++.h>
using namespace std;

char maxConsecutiveChar(const string& s) {
    if (s.empty()) return '\0';
    char maxChar = s[0];
    int maxLen = 1, curLen = 1;
    
    for (size_t i = 1; i < s.size(); i++) {
        if (s[i] == s[i-1]) {
            curLen++;
            if (curLen > maxLen) {
                maxLen = curLen;
                maxChar = s[i];
            }
        } else {
            curLen = 1;
        }
    }
    return maxChar;
}

int main() {
    string str = "aaabbaacccddef";
    cout << "Ky tu lap lien tiep nhieu nhat: " << maxConsecutiveChar(str); // Output: 'a' (3 lần)
    return 0;
}

Kết quả

Ky tu lap lien tiep nhieu nhat: a

Lưu ý

Nếu có nhiều ký tự cùng độ dài max, hàm trả về ký tự xuất hiện sớm nhất (do điều kiện > chứ không phải >=).