【发布时间】:2020-04-29 08:33:17
【问题描述】:
我正在尝试编写一个递归函数,以递归方式从给定字符串中删除所有重复字符。 例如“Hello world”->“Helo wrd”。
我的限制是:
- 不允许循环。
- 无法向原始函数添加更多参数 (remove_duplicates)。
- 不允许使用 string.h 库中的函数,尽管我可以递归地编写它们。
我可以使用另一个辅助递归函数。
到目前为止我编写的函数仅适用于短字符串,它调用该函数的次数太多。有什么建议可以提高效率吗?
void remove_duplicates3(char string[], int index)//(str,RecursiveStrlen(str, 0)-1)
{
int length = RecursiveStrlen(string + 1, 0);
if (string[index] == '\0' || index == 0)
{
return;
}
if (string[0] != string[index])
{
remove_duplicates3(string, index - 1);
}
else
{
BackspaceString(string, index);
remove_duplicates3(string, length - 1);
}
remove_duplicates3(string + 1, length - 1);
}
int RecursiveStrlen(char str[], int index)
{
if (str[index] == '\0')
return index;
return RecursiveStrlen(str, index + 1);
}
void BackspaceString(char string[],int index)//deletes one char from string in a specific index
{
if (string[index] == '\0')//end of string
return;
string[index] = string[index + 1];
BackspaceString(string, index + 1);
}
【问题讨论】:
-
附带问题:你对字符串的长度有限制吗?因为使用递归如果执行太多次会变质。
-
是的,限制为 256 个字符。