求两个字符串的交集

来源:互联网 发布:淘宝回收手机被骗了 编辑:程序博客网 时间:2024/05/29 10:56

题目:给定两个字符串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;elsehigh = 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;}


0 0