Trong bài toán lập trình này, chúng ta được cung cấp hai chuỗi. Và chúng tôi phải tìm tất cả các ký tự của chuỗi phổ biến trong cả chuỗi và chúng tôi phải in các ký tự chung này theo thứ tự bảng chữ cái . Và in ‘KHÔNG CÓ KÝ TỰ THÔNG DỤNG’ nào được tìm thấy nếu không có ký tự chung nào phát sinh. Cho rằng chuỗi không chứa tất cả các bảng chữ cái viết thường.
Hãy lấy một ví dụ -
Input : string1 : adsfhslf string2 : fsrakf Output : affs
Giải thích - Giữa hai xâu có a, f, s. Do đó, đầu ra từ điển là "afs".
Input : string1 : abcde string2 : glhyte Output : No common characters
Giải thích - Không có ký tự nào giống nhau.
Để giải quyết vấn đề này, chúng ta cần tìm các ký tự chung trong chuỗi. Và đầu ra sẽ là thứ tự từ vựng của chuỗi này.
Thuật toán
Thuật toán để giải quyết vấn đề này là -
Step 1 : Create two arrays a1[] and a2[] of size 26 each for counting the number of alphabets in the strings string1 and string2. Step 2 : traverse a1[] and a2[]. and in sequence print all those numbers that have values in the array.
Ví dụ
Hãy tạo một chương trình dựa trên thuật toán này để minh họa hoạt động -
#include<bits/stdc++.h> using namespace std; int main(){ string string1 = "adjfrdggs"; string string2 = "gktressd"; cout<<"The strings are "<<string1<<" and "<<string2; cout<<"\nThe common characters are : "; int a1[26] = {0}; int a2[26] = {0}; int i , j; char ch; char ch1 = 'a'; int k = (int)ch1, m; for(i = 0 ; i < string1.length() ; i++){ a1[(int)string1[i] - k]++; } for(i = 0 ; i < string2.length() ; i++){ a2[(int)string2[i] - k]++; } for(i = 0 ; i < 26 ; i++){ if (a1[i] != 0 and a2[i] != 0){ for(j = 0 ; j < min(a1[i] , a2[i]) ; j++){ m = k + i; ch = (char)(k + i); cout << ch; } } } return 0; }
Đầu ra
The strings are adjfrdggs and gktressd The common characters are : dgrs