判断字符串是否为回文的Java程序存在逻辑错误,请求修正
修正后的回文判断Java程序
你的代码存在两个关键问题,导致无法正确识别回文字符串:
- char数组转字符串错误:直接调用
C.toString()不会返回数组的字符内容,而是返回数组的内存地址格式字符串,必须用new String(C)来将char数组转换为对应的字符串。 - 冗余空循环:代码里的
for(int i=0; i<(C.length); i++){}完全没有作用,可直接删除。
修正后的完整代码
public class Palindrome { public String checkPal(String strr){ char[] C = strr.toCharArray(); int left=0; int right= C.length - 1; while(left < right){ char t = C[left]; C[left++] = C[right]; C[right--] = t; } // 正确将char数组转为字符串 String rev = new String(C); return rev; } public static void main(String[] args) { String S = "level"; Palindrome p = new Palindrome(); String R = p.checkPal(S); System.out.println(R); if(S.toLowerCase().equals(R.toLowerCase())){ System.out.println("hey Pal :)"); } else { System.out.println("Bye Pal :<"); } } }
更高效的优化方案(无需完整反转字符串)
判断回文不需要完全反转整个字符串,直接在原数组两端向中间对比字符,能节省内存且提升效率:
public class Palindrome { public boolean isPalindrome(String strr){ char[] C = strr.toLowerCase().toCharArray(); int left = 0; int right = C.length - 1; while(left < right){ if(C[left] != C[right]){ return false; } left++; right--; } return true; } public static void main(String[] args) { String S = "level"; Palindrome p = new Palindrome(); if(p.isPalindrome(S)){ System.out.println("hey Pal :)"); } else { System.out.println("Bye Pal :<"); } } }
内容的提问来源于stack exchange,提问作者Dokwa
相关产品推荐
相关产品推荐

