使用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
相关产品推荐
相关产品推荐

