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,maxCharkhicurLen > 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 >=).