题目:给定两个字符串s1,s2,求两个串的共同字符集;如s1="abc1234def789 0g",s2="ba 209834cdxyz", 交集为 result=“ba 209834cd”
思路:先将字符串s1排序,时间复杂度为O(nlogn),遍历 s2,查找s1中是否含有s2中当前字符,如有则加入结果集result
c语言具体实现如下(IDE DEVC++ 5.7):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void quick_sort(char *a,int low,int high){//快速排序
int x = low,y = high,i;
char k = a[low];
if(low >= high)
return;
while(x != y){
while(x<y && a[y]>=k)
y --;
a[x] = a[y];
while(x<y && a[x]<=k)
x ++;
a[y] = a[x];
}
a[x] = k;
quick_sort(a,low,x-1);
quick_sort(a,x+1,high);
}
int binary_search(char *str,int len,char value){//二分查找
int low,high,middle;
low = 0;
high = len - 1;
while(low <= high){
middle = (low + high)/2;
if(str[middle] == value)
return 1;
else if(str[middle] < value)
low = middle + 1;
else
high = middle - 1;
}
if(str[middle] != value)
return -1;
}
char *str_in_common(char *s1,int len,char *s2,char *result){
int i = 0;
char *p;
p = s2;
while(*p != '\0'){
if(binary_search(s1,len,*p) == 1)//查找相同字符
result[i++] = *p;
p ++;
}
result[i] = '\0';
return result;
}
int main(){
char a[] = "abc1234def789 0g";
char b[] = "ba 209834cdxyz";
char *r;
int len = strlen(a);
quick_sort(a,0,len-1);
puts(str_in_common(a,len,b,r));
return 0;
}