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

时间:2017-07-23 05:55:19

标签: c++ recursion

问题很简单 - 回文检查。这些限制使其变得相当复杂:

  1. 不允许使用任何字符串函数,甚至不允许使用字符串头文件(strlen())。
  2. 不允许使用向量或迭代器。
  3. 不能将其他参数传递给函数(这意味着不能使用使用索引开始和结束的解决方案)。这也意味着无法传递数组的大小。
  4. 解决方案应该是递归的。
  5. 这是我能想到的最好的:

    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。它只会引发“超出时间限制”错误。有人能指出我走向正确的方向吗?

1 个答案:

答案 0 :(得分:1)

在第一个循环中,检查字符串的长度,是一个无限循环。 完成始终设置为0并且永远不会更改。 实际上,这个标志不是必需的,你可以按如下方式修改循环:

while (input[i] != '\0') {
        count++;
        i++;
}

如果您确实希望保持“完成”状态。如果if子句条件为false,则只需将其设置为1:

while (!done) {
    if (input[i] != '\0') {
        count++;
        i++;
    }
    else
    {
        done = 1;
    }
}