【正确答案】(1)数据结构
采用字符串的顺序表示定义。
(2)思路
设置两个下标变量si,di。si指向源,di指向目标。先比较s1中i和j之间的字符个数和s2中字符个数的多少。若前者多,则先将s1中j以后的字符向前搬;若后者多,则向后搬。注意这两个搬的算法是不同的。然后再将s2插入s1经过搬后留出的空间中。
(3)算法
PSeqString substitute(PSeqString s1,int i,int j,PSeqString s2){
/*返回指向替换后的字符串的指针,s1和s2被插入和要插入的字符串,i和j如题*/
int si,di;
if(j-i-1<s2->n){
for(si=s1->n-1,di=s1->n+s2->n+i-j;si>=j-1;si--,di--){
s1->c[di]=s1->c[si];
}
}
else if(j-i-1>s2->n){
for(si=j-1,di=s2->n+i;si<s1->n;si++,di++){
s1->c[di]=s1->c[si];
}
}
for(si=0,di=i;si<s2->n;si++,di++){
s1->c[di]=s2->c[si];
}
s1->n=s1->n+s2->n+i-j+1;
return s1;
}
(4)代价分析
最坏时间代价O(n)(其中n=length(s1)+length(s2))。
【答案解析】