检查两个索引之间的回文

Checking for palindrome between two indices

我正在尝试检查字符串是否包含给定索引之间的回文。但是我无法在我的代码中找到错误。

bool isPal(char a[],int i,int j){

    for(int k=i;k<(j-i)/2;k++)
        if(a[k]!=a[j--])
            return 0;

    return 1;
}

您在循环内修改 j,同时更改结束条件(无论如何都不正确),您可以改用:

bool isPal(const char a[],int i,int j){
    for (int k = 0; k < (j - i) / 2 ; k++) {
        if (a[i + k] != a[j - k]) {
            return false;
        }
    }
    return true;
}

您的代码的最小更改为:

bool isPal(char a[], int i, int j)
{
    const int mid_index = (j + i) / 2;
    for (int k = i; k < mid_index; k++)
        if (a[k] != a[j--])
            return 0;

    return 1;
}

您正在使用 j-- 更改 j 的值,这将影响您的 for 循环的条件 k<(j-1)

您的错误是将 j 递增,但还假设(在循环条件中)它保持其输入值。您也可以将输入变量用作循环变量

bool isPalindrome(const char*a, int i, int j) {
    while(i<j)
        if(a[i++] != a[j--])
            return false;
    return true;
}

当为循环设置正确的停止条件时很简单。

for(int k=i;k<(j-i)/2;k++)

您从 i 开始,然后上升到 j-i-1。这不是你想要的。将 i 和 j 替换为一些值,您会看到。