
Common Character Count
Cho hai xâu kí tự, tìm số lượng kí tự chung giữa chúng.
Ví dụ:
- Với
s1 = "aabcc"
vàs2 = "adcaa"
, thì kết quảcommonCharacterCount(s1, s2) = 3
.
2 xâu s1 và s2 có3
kí tự chung:2
kí tự'
a'
và1
kí tự'
c'
.
Đầu vào/Đầu ra:
-
[Thời gian chạy] 0.5 giây
-
[Đầu vào] string s1, s2
Xâu kí tự chỉ chứa các kí tự chữ cái in thường, in hoa
Điều kiện:
1 ≤ s1.length, s2.length < 15
. -
[output] integer
Lý thuyết
Mảng tần suất – frequency array
Định nghĩa: Mảng tần suất – frequency array là mảng dùng để kiếm soát số lần xuất hiện của một giá trị trong một mảng cho trước
Cách xây dựng: Cho trước một dãy số A
. Tìm mảng B
là mảng tần suất ứng với dãy A
- Lần lượt xét các chỉ số
i
mà0 <= i < A.size()
rồi tăng giá trị củaB[A[i]]
lên một đơn vị.vector<int> frequencyArray(vector<int> A) { for (int i = 0; i < (int) A.size(); ++i) B[A[i]]++; return B; }
Ví dụ minh họa thuật toán: Với A = [1,2,3,3,1,1]
thì
- Xét
i=0
thìB[A[0]]
tăng lên1
đơn vị nênB[1]=1
- Xét
i=1
thìB[A[1]]
tăng lên1
đơn vị nênB[2]=1
- Xét
i=2
thìB[A[2]]
tăng lên1
đơn vị nênB[3]=1
- Xét
i=3
thìB[A[3]]
tăng lên1
đơn vị nênB[3]=2
- Xét
i=4
thìB[A[4]]
tăng lên1
đơn vị nênB[1]=2
- Xét
i=5
thìB[A[5]]
tăng lên1
đơn vị nênB[1]=3
Độ phức tạp: O(n)
Một số ứng dụng cơ bản:
- Kiểm tra một số có xuất hiện trong dãy không ?
- Tìm số lần xuất hiện của một số trong dãy
- Áp dụng cho một số thuật toán sắp xếp (Counting sort)
Hướng dẫn bài tập.
Code mẫu:
Ngôn ngữ C++:
int commonCharacterCount(std::string s1, std::string s2)
{
vector <int> a(256);
vector <int> b(256);
for (int i = 0 ; i < s1.length(); i++)
a[s1[i]]++;
for (int i = 0 ; i < s2.length(); i++)
b[s2[i]]++;
int d = 0;
for (int i = 97; i <= 122; i++)
d += min(a[i], b[i]);
return d;
}
Post Comment