请注意下面的代码不是满分代码,,求助大佬们!
题目:
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述
有n个字符串,现在要把这n个字符串按顺序拼接成一个更大的字符串。对于字符串的拼接,我们有特殊的要求:拼接的过程中要去掉重复的部分。如:字符串“aabbcc”与字符串“ccbbaa”拼接,其中“cc”为重复的部分,拼接后的字符串为“aabbbbaa”。需要特别注意的是,拼接过程中重复的部分是相对前面已经拼接了的字符串而言的,如:“ab”、“ba”、“aa”三个字符串的拼接过程为:“aa”,“aa”。
输入
第1行为一个整数n。第2至n+1行中,每行包括一个字符串,且该字符串仅由小写字母组成。
输出
仅一行,为拼接后的字符串。
样例输入
5 aba bb bba abab babc
样例输出
ababbababc
数据范围限制
1 <= n <= 100,1 <= 每个字符串的长度 <= 100
我的思路写在代码注释里了,代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100;
char s1[N], s2[N];
int main () {
//num用来记录相同的位数,flag用来标记是否相同
int n, len1, len2, num = 0, flag = 1;
cin >> n;
if(n == 1){
cin >> s1;
cout << s1;
}
else{
cin >> s1 >> s2;
for(int i=0; i<=n-2; i++){
len1 = strlen(s1);
len2 = strlen(s2);
//找相同的字符数量
//相同字符数量j,从1开始比较
for(int j=1; j<=len2; j++){
//比较s1的后j位和s2的前j位是否相同
for(int k=1; k<=j; k++){
//相同则继续比较
if(s1[len1-j+k-1] == s2[k-1]);
//不同则令flag=0,停止比较
else{
flag = 0;
break;
}
}
//flag=1即字符相同,num计数+1
if(flag == 1)
num ++;
//不同则停止比较
else
break;
}
//cout << "num=" << num << endl;
//根据num记录的数量来删除相同的字符
for(int i=len1-num; i<len1; i++)
s1[i] = '\0';
//拼接
strcat(s1, s2);
//cout << "拼接后s1=" << s1 << endl;
if(i<n-2){
cin >> s2;
// cout << "输入的s2=" << s2 << endl;
flag = 1;
num = 0;
}
}
cout << s1;
}
return 0;
}