题目
给出一个函数来复制(这里说复制我觉得不是很合适,应该时连接或合并更合适)两个字符串A和B。字符串A的后几个字符和字符串B的开始几个字符重叠。
解法
这个问题的方法有点类似于找出两个字符串中的重复部分。这里也是先使用一个指针i顺序遍历A数组,使用指针j指向B数组,找到A数组中与B数组开头的字符(B[j=0])相同的位置,然后使用一个指针k指向A数组中重叠字符串的开始位置,然后k和j一起向后移动,并比较A[k]是否等于B[j],如果相同继续向后移动,直到k移动到A数组的结尾。此时,j指向了B数组中重叠字符串的结尾位置,i指向了A数组中重叠字符串的开始位置。
i k
a b c d e f g
e f g h i k l
j
然后创建一个新的数组C,将A数组中[0-i]的字符复制进去,然后接着将整个B字符串复制进去就完成了两个字符串的连接。
LINK-TWO-STRING(char[] A, char[] B):
for i = 0 to A.length:
int k = i, j = 0;
int flag = 0;
while A[k] == B[j]:
k++; j++;
if k == A.length:
flag = 1;
break;
if flag == 1:
break;
int[] C = new char[i+B.length];
for k = 0 to i:
C[k] = A[k];
for i = 0 to B.length:
C[k] = B[i];
return C;