Cho một chuỗi ký tự. Nhiệm vụ là tìm số ký tự tối đa giữa hai lần xuất hiện của cùng một ký tự. Nếu không có ký tự lặp, trả về -1.
Ví dụ
Đầu vào - str = "abcdba"
Đầu ra - Số ký tự tối đa: 4
Giải thích - Các ký tự lặp:
'a': chỉ số đầu 0, cuối 5 → 5-0-1 = 4 ký tự giữa 'b': chỉ số đầu 1, cuối 4 → 4-1-1 = 2 ký tự giữa Kết quả: 4
Đầu vào - str = "AbcAaBcbC"
Đầu ra - Số ký tự tối đa: 5
Giải thích - Phân biệt chữ hoa/thường:
'A': chỉ số 0, 3 → 3-0-1 = 2 'b': chỉ số 1, 7 → 7-1-1 = 5 'c': chỉ số 2, 6 → 6-2-1 = 3 Kết quả: 5
Lưu ý - Chuỗi "abcdefg" không có ký tự lặp → trả về -1
Phương pháp
- Nhận mảng ký tự Str[]
- Hàm
maxChars(char str[], int n) - Khởi tạo maxC = -1
- Duyệt chuỗi với 2 vòng lặp lồng nhau
- Nếu str[i] == str[j], tính temp = j - i - 1
- Cập nhật maxC nếu temp lớn hơn
- Trả về maxC
Chương trình mẫu
#include <stdio.h>
#include <stdlib.h>
int maxChars(char str[], int n) {
int maxC = -1;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (str[i] == str[j]) {
int temp = abs(j - i - 1);
if (temp > maxC)
maxC = temp;
}
}
}
return maxC;
}
int main() {
char Str[] = "AbcAaBcbC";
printf("Số ký tự tối đa giữa 2 ký tự giống nhau: %d", maxChars(Str, 9));
return 0;
}
Kết quả
Số ký tự tối đa giữa 2 ký tự giống nhau: 5