如何删除C中字符串中的所有相邻重复项。例如..if" caaabbcdd"是给定的字符串然后它应该按顺序删除
1. cbbcdd
2. ccdd
3. dd
因此最后返回一个空字符串。启动时间复杂度可以是O(n ^ 2)。任何人都可以帮忙。
到目前为止,我所做的一切
void recursiven2(char *str)
{
int i,j,k,len;
len=strlen(str);
for(i=0;i<len-1;i++)
{
if(str[i]==str[i+1])
{
for(j=i;j<len-2;j++)
str[j]=str[j+2];
str[j]='\0';
}
}
}
答案 0 :(得分:1)
您可以参考this。它有一个非常好的解释。
答案 1 :(得分:0)
你的代码很接近,但并不完全。
从“如果这个角色与之前的角色相同,放弃它”的角度来看,更容易思考。如果您看到差异,那么您的代码更像是“如果此字符与下一个字符相同”。
此外,memmove()
只是喜欢这个。
也许是这样的:
void compress(char *str)
{
size_t len = strlen(str);
if(len <= 1)
return;
for(size_t i = 1; i < len; )
{
if(str[i] == str[i - 1])
{
memmove(&str[i], &str[i + 1], (len - (i + 1) + 1);
--len;
}
else
++i;
}
}
上面可能有一个obi-wan error(或两个!),我还没有测试过。
答案 2 :(得分:0)
string removeDuplicates(string s) {
int done=0;
while(done==0)
{
int check=0;
for(int i=0;i<s.length();i++)
{
if(s[i]==s[i+1])
{
s.erase(i,2);
check=1;
}
};
if(check==0)
{
done=1;
}
}
return s;
}