Nhiệm vụ: tìm số lượng tối đa các xâu con độ dài K gồm các ký tự giống nhau. Cho xâu s và số nguyên K, đếm số lần xuất hiện của xâu con độ dài K toàn ký tự giống nhau. Chọn xâu con xuất hiện nhiều nhất.
Ví dụ 1
Đầu vào** –
s = "tuuxyyuuc", K = 2
Đầu ra** – 2
Giải thích** – Xâu con độ dài 2 cùng ký tự: "uu", "yy". "yy" xuất hiện 1 lần, "uu" xuất hiện 2 lần → kết quả 2.
Ví dụ 2
Đầu vào** –
s = "hhigggff", K = 3
Đầu ra** – 1
Phương pháp
- Duyệt 26 chữ cái 'a'..'z'.
- Với mỗi ký tự c, quét xâu tìm các đoạn liên tiếp của c độ dài ≥ K.
- Mỗi đoạn độ dài L cho ra
floor(L/K)xâu con độ dài K không chồng lấn. - Tổng cho ký tự c, lấy max trên 26 ký tự.
Ví dụ
#include <bits/stdc++.h>
using namespace std;
int Max(string str, int K) {
int ans = 0, size = str.size();
char c;
for (int j = 0; j < 26; j++) {
c = 'a' + j;
int CurrCh = 0;
for (int i = 0; i <= size - K; i++) {
if (str[i] != c) continue;
int count = 0;
while (i < size && count != K && str[i] == c) {
i++; count++;
}
i--;
if (count == K) CurrCh++;
}
ans = max(ans, CurrCh);
}
return ans;
}
int main() {
string str = "tuuuxyuuu";
int K = 3;
cout << Max(str, K);
return 0;
}
Đầu ra
2