不使用向量、大小或其他参数的递归回文检查
Posted
技术标签:
【中文标题】不使用向量、大小或其他参数的递归回文检查【英文标题】:Recursive palindrome checking without using vectors, size or additional parameters 【发布时间】:2017-07-23 05:55:18 【问题描述】:问题很简单——回文检查。这些限制使它变得相当复杂:
-
不允许使用任何字符串函数,甚至字符串头文件(
strlen()
已出)。
不允许使用向量或迭代器。
不能向函数传递额外的参数(这意味着不能使用使用索引作为开始和结束的解决方案)。这也意味着无法传递数组的大小。
解决方案应该是递归的。
这是我能想到的最好的:
bool checkPalindrome(char input[])
static int count = 0, i = 0, done = 0;
while(!done)
if(input[i]!='\0')
// length of string is stored in count
count++;
i++;
done = 1; i = 0;
if(count>0)
// check characters from start and end
if(input[i]==input[count-1])
count = count - 2;
return checkPalindrome(input+1);
else
return false;
else
return true;
但这在我应该提交的在线 IDE 上不起作用。它只是抛出“超出时间限制”错误。有人能指出我正确的方向吗?
【问题讨论】:
预期的复杂性是多少? 没有指定时间复杂度,但是每个测试用例应该在 150 到 350 毫秒之间完成(我知道这很随意)。仅当测试用例拒绝运行,或者您采用 O(n^3) 复杂度等等时才会扣除分数。 【参考方案1】:在第一个循环中,您检查字符串的长度,这是一个无限循环。 完成始终设置为 0 并且永不更改。 其实这个标志不是必须的,可以修改循环如下:
while (input[i] != '\0')
count++;
i++;
如果您确实想保留 'done' 标志,只需在 if 子句条件为 false 时将其设置为 1:
while (!done)
if (input[i] != '\0')
count++;
i++;
else
done = 1;
【讨论】:
PS - 请删除您重复的答案。 :P以上是关于不使用向量、大小或其他参数的递归回文检查的主要内容,如果未能解决你的问题,请参考以下文章