在Java中检查字符串是否仅有一个字符与回文串不匹配

3

我需要编写一个布尔函数,用Java语言来检查一个字符串是否为回文字符串。

以下是我的代码:

    static boolean isPalindrome(String input) 
{ 
    int i = 0;
    last = input.length() - 1; 
    while (i < last) { 
        if (input.charAt(i) != input.charAt(last)) 
            return false; 
        i++; 
        last--; 
    } 
    return true; 
}

我想在我的代码中添加这部分,但我卡在了如果只有一个字符不匹配,我应该将其视为有效回文的问题上。

样例结果:

“book” ​-> true
“refer” ​-> true
“” ​​-> true

1
好的,计算不匹配的数量,并在计数达到2时立即返回false。 - JB Nizet
2个回答

4

当两个字符不同时,您不立即返回false,而是记录有多少对字符不同:

static boolean isPalindrome(String input)
{
    int i = 0;
    int last = input.length() - 1;
    int differentCount = 0;
    while (i < last) {
        if (input.charAt(i) != input.charAt(last)) {
            differentCount++;
            // only return false if more than one character is different
            if (differentCount > 1) {
                return false;
            }
        }
        i++;
        last--;
    }
    return true;
}

2
添加一个布尔标志,用于跟踪您是否已经找到了不匹配的字符对:
static boolean isPalindrome(String input) 
{ 
    boolean firstMismatch = true;
    int i = 0;
    last = input.length() - 1; 
    while (i < last) { 
        if (input.charAt(i) != input.charAt(last)) {
            if (firstMismatch) {
                firstMismatch = false;
            } else {
                return false; 
            }
        }
        i++; 
        last--; 
    } 
    return true; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接