Code đếm số lượng kí tự chung giữa hai xâu kí tự bị sai

Mọi người cho em hỏi vì sao code em nó không ra, nó lại ra 29888266

#include <iostream>
using namespace std;
int CommonCharacterCount(string s1, string s2)
{
   int a[100];
   int b[100];
    for (int i = 0; i < s1.length();i++) {
            a[s1[i]]++;
    }
    for (int i = 0 ; i<s2.length();i++) {
          b[s2[i]]++;
    }
    int ans=0;
    for (int i = 97; i <= 122;i++) {
        ans += min (b[i],a[i]);
    }
    return ans;
}
int main()
{
    string s1= "aaabbcc";
    string s2 = "aaiooqc";
    cout << CommonCharacterCount(s1,s2);
    return 0;
}

a, b là mảng 100 phần tử.
i = 97~122. -> truy cập sang vùng khác rồi.
Bạn check lại thuật toán đã. Bạn đang bị sai thuật toán rồi

3 Likes

Bạn phải điều chỉnh mảng rồi mới vào được :smiley:

5 Likes

Vâng em cảm ơn nhiều ạ

Nhưng em tìm không thấy sai thuật toán nào hết, mấy anh chỉ cho em được không ạ

  • kí tự không chỉ gồm [a-z] ?, không có chữ hoa hay kí tự khác ah.
  • Ngay ví dụ của bạn, thì S1 có 3 kí tự “a”, S2 có 2 kí tự “a” thì ans sẽ tăng lên 2. Có đúng spec không? Mình nghĩ TH này chỉ cần tăng 1, vì chung kí tự “a”? Mình hiểu sai?
2 Likes

Xin lỗi vì mới đầu mình cũng thắc mắc như bạn song rồi xem đề ai cx làm z nên mình làm theo luôn, với lại test case cũng toàn ký tự thường

Nếu đề đảm bảo:

  • Chuỗi chỉ kí tự Latin.
  • Chuỗi luôn là kí tự thường.
    • Nếu có chữ HOA thì chỉ cần tolowwer().

Thì bạn chỉ sửa 1 tí trong đoạn mã trên là có kết quả đúng với mảng chỉ 26 phần tử.

Nói cho đủ thì mảng với 256 phần tử thì “cân” được hết rồi.

3 Likes

Vâng thanks anh :smiley: :sunny:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?