求两个字符串的交集

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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值