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

Số ký tự tối đa giữa hai ký tự giống nhau trong chuỗi C

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