求两个字符串的交集
题目:给定两个字符串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 != " "){ if(binary_search(s1,len,*p) == 1)//查找相同字符 result[i++] = *p; p ++; } result[i] = " "; 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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。