<分区>
这里是来自“破解编码面试”Q1.3“设计算法并编写代码以在不使用任何额外缓冲区的情况下删除字符串中重复字符的问题。注意:一个或两个额外的变量就可以了。一个额外的数组的拷贝不是。”我写了一个看起来运行良好的程序,但我对自己的程序感到困惑。这是附加的代码。
string remove_duplicates(string &s1)
{
int n=s1.size();
for(int i=n-1; i!=-1; --i)
for(int j=0; j<i; ++j)
{
if(s1[i]==s1[j])
{
int k=i;
while(k!=n)
{
s1[k]=s1[k+1];
k++;
}
}
}
return s1;
}
如果 s1=abcdeafg,使用此代码输出将是 abcdefg,(如果输入是 abababab,输出将是 ab) 但我的想法是,因为 s1 的长度没有改变,所以输出应该是 abcdefga,因为我只是将第二个 'a' 移到了 s1 的末尾。你们能帮我解释一下吗?