Trên codefights có bài như thế này:
[QUOTE]Given two strings, find the number of common characters between them.
Example
1, For s1 = “aabcc” and s2 = “adcaa”, the output should be
commonCharacterCount(s1, s2) = 3.
Strings have 3 common characters - 2 "a"s and 1 “c”.
2, For s1 = “zzzz” and s2 = “zzzzzzz”, the output should be
commonCharacterCount(s1, s2) = 4.
Strings have 4 common characters “z”.
Input/Output
[time limit] 500ms (cpp)
[input] string s1
A string consisting of lowercase latin letters a-z.
Constraints:
3 ≤ s1.length ≤ 15.
[input] string s2
A string consisting of lowercase latin letters a-z.
Constraints:
4 ≤ s2.length ≤ 15.
[output] integer[/QUOTE]
Em hiểu mang máng đề bài là tìm các kí tự chung giữa hai xâu. Ban đầu em định duyệt từ đầu tới cuối của string 1, đối với mỗi phần tử của string 1 em sẽ tìm trong string 2 xem có phần tử nào giống không, nếu tìm được một phần tử giống thì tăng biến đếm lên một đơn vị, đồng thời xóa cái kí tự ở cái vị trí vừa tìm được trong string 2 đi rồi break. Sau đó chuyển sang phần tử tiếp theo của string 1.
code của em đây
[CODE]
int commonCharacterCount(string s1, string s2){
int i, j, count = 0, n = s1.length(), m =s2.length(), t;
while(i < n){
for(j = 0; j < m; j ++){
if(s1[i] == s2 [j]){
count ++;
t = s2[j];
s2[j] = s2[m];
s2[m] = t;
m --;
break;
}
}
i ++;
}
return count;
}[/CODE]
em test thì chạy ok tuy nhiên gửi lên codefights thì nó báo thời gian xử lý code vượt quá thời gian cho phép
Sau đó em đọc được trên mạng có cái thuật toán này:
Em hiểu là tìm tập hợp các kí tự mà hai xâu đều có, sau đó xét từng phần tử của tập hợp đó xem trong hai xâu, mỗi xâu có bao nhiêu phần tử giống chúng. Rồi trả về số phần tử chung nhỏ nhất.
ví dụ s1=aabcc, s2=adcaa thì sẽ có các phần tử chung là a và c;
s1 có 4 phần tử giống
s2 có 3 phần tử giống
=>đáp án là 3
s1=zzzz, s2=zzzzzzz thì sẽ có các phần tử chung là z;
s1 có 4 phần tử giống
s2 có 7 phần tử giống
=>đáp án là 4
Tuy nhiên em không biết thục hiện thuật toán trên như thế nào, các bác có thể chỉ cho em được không ạ. Nếu bác nào có thuật toán hay hơn thì cho em xin.
Em cám ơn