小明的好朋友来到了小明实习的城市旅游,于是便约小明出去吃饭。在吃饭闲聊的过程中,朋友得知小明从事的是文本处理相关的工作之后,便想试探一下小明的业务能力,于是问了小明一个“简单”的问题:
给定两个文本s1和s2(两个文本都是由小写字母构成的),s1最少重复几次才能使得s2是s1的子序列?
【相关推荐】
题目内容:
输入2 个字符串S1 和S2,要求删除字符串S1 中出现的所有子串S2,即结果字符串中不能包含S2。
提示:输入数据的设计使得不可能出现输出为空的情况。
输入格式:
输入分别给出2 个每个不超过80 个字符长度的不带空格的非空字符串,对应S1 和S2。
输出格式:
在一行中输出删除字符串S1 中出现的所有子串S2 后的结果字符串。
输入样例:
Thisisatest is
输出样例:
Thatest
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * returnStr(char * s1, const char * s2);
char * returnStr(char * s1, const char * s2)
{
char * str = 0 ;
char * p = 0;
char * p_temp = 0;
while ((p = strstr(s1, s2)) != NULL) {
p_temp = p;
*p = '\0';
str = (char *)malloc(sizeof(s1)+1);
strcpy(str, s1);
strcat(str, p + strlen(s2));
s1 = str;
}
*p_temp = s2[0];
free(str);
str = NULL;
return s1;
}
int main()
{
char * s1 = 0 ;
char * s2 = 0 ;
char * temp = 0;
printf("please input double string : ");
s1 = (char *)malloc(81);
s2 = (char *)malloc(81);
scanf("%s %s", s1, s2);
temp = s1;
//printf("%s %s", s1 ,s2);
s1 = returnStr(s1, s2);
printf("%s\n",s1);
s1 = temp;
free(s1);
free(s2);
s1 = NULL;
s2 = NULL;
return 0;
}