如何判断回文字符串
百度百科:回文字符串是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文字符串
回文字符串判断的3种方法:
1 使用 for 循环判断(百度推荐)
是将字符串分隔成两半,先对比第一位和最后一位是否相等,如果相等进行下一次循环,每次给首位+1 和末尾-1,然后再进行判断,在整个循环过程中如果有一次不相等就里面返回 false,如果整个循环能顺利执行完则说明是回文字符串,直接返回 true 即可,实现代码如下
public class Plalindrome { public static void main(String[] args) { String str = "12321"; String str2 = "1231"; String str3 = "123321"; System.out.println(isPlalindrome_1(str)); System.out.println(isPlalindrome_1(str2)); System.out.println(isPlalindrome_1(str3)); } /** * 用 for 循环判断 * @param str 待对比字符串 * @return */ private static boolean isPlalindrome_1(String str) { char[] chars = str.toCharArray(); int maxSize = chars.length / 2; // 循环比较次数 for (int i = 0; i < maxSize; i++) { if (chars[i] != chars[chars.length - 1 - i]) { // 最前面的和最后的依次对比,如果有一个不相同,则返回 false return false; } } return true; } }
2、使用方法循环调用实现
可以初始化两个指针 low 和 high,让它们分别指向字符串的第一个字符和最后一个字符,每次判断两个指针指向的字符是否相同,如果相同,则更新指针,是 low = low+1 和 high = high-1,然后判断再进行判断,当所有循环到最中间时二者还相同,则证明是回文字符串,实现代码如下
public class Plalindrome { public static void main(String[] args) { String str = "12321"; String str2 = "1231"; String str3 = "123321"; System.out.println(isPlalindrome_2(str, 0, str.length() - 1)); System.out.println(isPlalindrome_2(str2, 0, str2.length() - 1)); System.out.println(isPlalindrome_2(str3, 0, str3.length() - 1)); } /** * 用方法循环调用实现 * @param str 待对比字符串 * @param low 前面字符的下标 * @param high 后面字符的下标 * @return */ private static boolean isPlalindrome_2(String str, int low, int high) { if (high == 0 || high == 1) { return true; } else { char c1 = str.charAt(low), c2 = str.charAt(high); if (c1 == c2) { // 字符对比相等 return isPlalindrome_2(str, low + 1, high - 1); } else { // 字符对比不相等 return false; } } } }
3、使用内置函数反转判断
回文字符串最简单的实现方式就是将字符串进行反转之后再与原字符串进行判断,假如二者相同的话则证明为回文字符串,我们可以借助 StringBuilder
来实现。当然,除了可以使用 StringBuilder
之外,我们也可以使用 StringBuffer
来实现,实现代码如下
public class Plalindrome { public static void main(String[] args) { System.out.println(isPlalindrome_3("12321")); System.out.println(isPlalindrome_3("1231")); System.out.println(isPlalindrome_3("123321")); } /** * 借助内置函数反转实现回文字符串判断 * @param str 待判断字符串 * @return */ private static boolean isPlalindrome_3(String str) { StringBuilder sb = new StringBuilder(str); sb.reverse(); return sb.toString().equals(str); } }
不积跬步,无以至千里;不积小流,无以成江海