You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CharacterComparator判断字符串是否为回文的代码问题求助

问题描述

我编写了一个public boolean same方法,该方法接收字符串w,并尝试使用字符比较器CharacterComparator<Character> d,检查字符串中的每个字符是否与反转后的字符串对应字符相同(本质是判断是否为回文)。

我的实现步骤是:先将字符串w反转得到字符串S,再通过for循环调用比较器的equalChars方法逐字符对比两个字符串,期望所有字符相同时返回true,否则返回false。但当前代码存在问题,现附上代码,请求指出错误并修正。

代码如下:

public boolean same(String w, CharacterComparator<Character> d) {
    String S = "";
    for (int i = w.length() - 1; i >= 0; i--) {
        S = S + w.charAt(i);
    }
    for (int x = 0; x < w.length()-1; x++){
    if (d.equalChars(w.charAt(x), S.charAt(x))) {
        return true;}
    }
    return false;
} 
错误分析
  • 循环范围错误:for循环的终止条件是x < w.length()-1,这会导致最后一个字符(索引为w.length()-1)没有被比较,漏掉了关键的一对字符。
  • 逻辑判断完全颠倒:当前代码只要发现任意一对字符相等就立刻返回true,这和“所有字符都相等才返回true”的需求完全相反。正确逻辑应该是:只要有一对字符不相等,就立即返回false;全部字符对比完成后都没有不相等的情况,才返回true。
修正后的代码
public boolean same(String w, CharacterComparator<Character> d) {
    // 反转字符串得到S
    String S = "";
    for (int i = w.length() - 1; i >= 0; i--) {
        S = S + w.charAt(i);
    }
    // 遍历所有字符进行对比
    for (int x = 0; x < w.length(); x++) {
        // 只要有一对字符不相等,直接返回false
        if (!d.equalChars(w.charAt(x), S.charAt(x))) {
            return false;
        }
    }
    // 所有字符都匹配,返回true
    return true;
}
额外优化建议

字符串拼接S = S + w.charAt(i)在循环中会频繁创建新的String对象,效率较低,建议改用StringBuilder来优化反转过程:

public boolean same(String w, CharacterComparator<Character> d) {
    StringBuilder sb = new StringBuilder(w);
    String S = sb.reverse().toString();
    for (int x = 0; x < w.length(); x++) {
        if (!d.equalChars(w.charAt(x), S.charAt(x))) {
            return false;
        }
    }
    return true;
}

内容的提问来源于stack exchange,提问作者user18984687

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:35:18