判断回文字符串 java将原串反转_面试系列第2篇:回文字符串判断的3种方法!...

4746f00e413366d72f4db9405f301814.png

作者 | 磊哥

来源 | Java面试真题解析(ID:aimianshi666)

转载请联系授权(微信ID:GG_Stone)

回文字符串判断是面试和笔试中常见的面试题之一,同时也是 LeetCode 中一道经典的面试题,那么本文我们就来看一下什么是回文字符串?以及如何实现回文字符串的判断。

回文字符串定义

回文字符串是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文字符串。(来自百度百科)

举个例子,比如以下字符串就为回文字符串:

cf488d08ed0d63f9b2bf6cf16ed67724.png

be9d22bace0556bedca5b7efbda79a62.png

回文字符串判断的3种方法

1、使用内置函数反转判断

回文字符串最简单的实现方式就是将字符串进行反转之后再与原字符串进行判断,假如二者相同的话则证明为回文字符串,我们可以借助 StringBuilder 来实现,实现代码如下:

public class Plalindrome{

public static void main(String[] args){

System.out.println(isPlalindrome_1("12321"));

System.out.println(isPlalindrome_1("1231"));

System.out.println(isPlalindrome_1("123321"));

}

/**

* 借助内置函数反转实现回文字符串判断

* @param str 待判断字符串

* @return

*/

private static boolean isPlalindrome_1(String str){

StringBuilder sb = new StringBuilder(str);

sb.reverse();

return sb.toString().equals(str);

}

}

程序的执行结果为:

true

false

true

当然,除了可以使用 StringBuilder 之外,我们也可以使用 StringBuffer 来实现,实现代码都是相同的,我们这里就不再赘述。

2、使用方法循环调用实现

我们可以初始化两个指针 low 和 high,让它们分别指向字符串的第一个字符和最后一个字符,每次判断两个指针指向的字符是否相同,如果相同,则更新指针,是 low = low+1 和 high = high-1,然后判断再进行判断,当所有循环到最中间时二者还相同,则证明是回文字符串,如下图所示:

4f71dfcff9b8c50d9364f2c4d17acc78.png实现代码如下:

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;

}

}

}

}

程序的执行结果为:

true

false

true

3、使用 for 循环判断

使用 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_3(str));

System.out.println(isPlalindrome_3(str2));

System.out.println(isPlalindrome_3(str3));

}

/**

* 用 for 循环判断

* @param str 待对比字符串

* @return

*/

private static boolean isPlalindrome_3(String str){

char[] chars = str.toCharArray();

int maxSize = chars.length / 2; // 循环比较次数

for (int i = 0; i 

if (chars[i] != chars[chars.length - 1 - i]) {

// 最前面的和最后的依次对比,如果有一个不相同,则返回 false

return false;

}

}

return true;

}

}

程序的执行结果为:

true

false

true

当然,除了以上 3 种实现方法之外,我们还可以有更多判断的方法,比如将字符串倒序之后组成一个新的字符串,再将新老字符串进行比较,或者直接使用 StringBuffer 的 reverse 来实现等。

回文字符串判断的意义

回文字符串判断的意义,我能想到的就是“面试”了,因为在实际的生活中真的很难找到它的实际应用,这就好像游戏和玩具对人的“意义”一样,它有什么意义呢?其实“面试”一条也就够了吧。

总结

回文字符串可以使用内置反转字符串或者递归的方式进行对比,但如果是实际的面试中,我推荐使用第 3 种方式来实现,因为它更原始、需要的依赖也更少,我们并不需要借助 JDK 自身的 API 就可以实现,并且它的实现代码也很简单易懂。

你还有更好的解决方案吗?欢迎评论区补充留言~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值