不使用向量、大小或其他参数的递归回文检查

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

以上是关于不使用向量、大小或其他参数的递归回文检查的主要内容,如果未能解决你的问题,请参考以下文章

在模板中调整递归嵌套向量的大小

python:递归检查以确定字符串是不是为回文

用递归判断字符串是否为回文

利用递归函数实现检查一个字符串是否为回文数

递归算法的空间复杂度

用递归调用来判断字符串是否是回文