C-现在项目中有一些字符串,需要判断包含关系和合并序列。

发布于 2016-11-18 05:16:29 字数 222 浏览 1332 评论 3

首先两个字符串string1=“ab”和字符串string2=“c”,他们的合并关系指输出所有的组合,这个例子应该输出:abc,acb,cab(每一个字符串的元素相对位置不变)。
给定了一个字符串string3=“abc”,怎么按照上面说的合并规则确定string3是不是string1和string2的一个合并关系呢?处理的比较多,求高效的思路。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2017-07-06 11:31:36

1.首先判断string1和string2是否同时包含在string3中,如果否直接判断不是;
2.如果上一步判断为是,则进一步判断两者在string3中出现的位置是不是有重合的部分,如果有重合,则判断为不是,否则判断为是;

晚风撩人 2017-04-12 18:30:59

我觉得你可以将string1和string2,转换为数组并合成一个数组,再和string3转换的数组进行对比若完全相等,则符合合并关系。

灵芸 2017-01-18 10:57:45

假设两个字符串分别是string1和string2,长度分别是M和N, 合并得到的字符串为string3;
1:问题中要求每一个字符串的元素相对位置不变,那么string3的首字符要么是string1[0]要么是string2[0];
那么string3字符串的规律就是这样的:
string1[0] + (string1[1…M-1]和string2[0…N-1]字符串合并)
string2[0] + (string1[0…M-1]和string2[1…N-1]字符串合并)
2:1中描述的粗体部分仍然可以看做此问题,第一个字符串的第一个字符+…..,和第二个字符串的第一个字符+…; 这样问题就转化为一个递归问题了。
3:第二个问题,给定str1,str2,str3,由于字符串中的字符相对位置确定,三个指针顺序遍历,如果str3中的当前字符是str1中字符,则++str3,++str1,如果是str2中的字符串,则++str2,++str3,如果有不相等或者遍历后str1,str2仍有字符则false.

namespace X{
void out(const char *str1, const char *str2, char *str3, int m, int n, int index)
{
if (!m && !n)
std::cout<<str3<<std::endl;
if (m) {
str3[index] = str1[0];
out(str1+1, str2, str3, m-1, n,index+1);
}
if (n) {
str3[index] = str2[0];
out(str1,str2+1, str3, m, n-1, index+1);
}
}

bool isstringsum (const char *str1, const char *str2, const char *str3) {
while (*str3) {
if(*str1==*str3) ++str1;
else if(*str2==*str3) ++str2;
else return false;
++str3;
}

if(*str1||*str2)
return false;
return true;
}
}

int main()
{
char *str1 = "ab";
char *str2 = "c";

int m = strlen(str1);
int n = strlen(str2);

char *strout= (char*) malloc((m+n+1)*sizeof(char));
strout[m+n] = '';

std::cout<<"result:"<<std::endl;
X::out (str1, str2, strout, m,n, 0);

char *str3 = "cab";
X::isstringsum(str1,str2,str3)?std::cout<<"ok"<<std::endl:std::cout<<"error"<<std::endl;

free(strout);
return 0;
}

Code On ideone

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文