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

回文字符串定义

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

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

回文字符串判断的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,然后判断再进行判断,当所有循环到最中间时二者还相同,则证明是回文字符串,如下图所示:

实现代码如下:

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 < maxSize; i++) {if (chars[i] != chars[chars.length - 1 - i]) {// 最前面的和最后的依次对比,如果有一个不相同,则返回 falsereturn false;}}return true;}
}

程序的执行结果为:

true

false

true

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

回文字符串判断的意义

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

总结

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

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

回文字符串判断的3种方法相关推荐

  1. 面试系列第2篇:回文字符串判断的3种方法!

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 回文字符串判断是面试和笔试中常见的面试题之一,同时也是 LeetCode ...

  2. c++语言判断回文字符串,判断一个字符串是否回文

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 从键盘读入一个字符串,判断该字符串是否回文,要求输入的字符串中不包含空格,回文就是字符串和其逆串完全相同. 输入一个字符串(不包含空格) 回文输出yes, ...

  3. Python案例:四种方法判断回文字符串

    文章目录 一.回文字符串 1.概念 2.实例 二.判断回文字符串 1.创建程序 - 回文字符串判断.py 2.运行程序,查看结果 一.回文字符串 1.概念 回文字符串是一个正读和反读都一样的字符串. ...

  4. 判断是否是回文字符串两种方法

    判断回文字符串的两种方法 public class JudgingPalindrome {public static void main(String[] args) {solution01();Sy ...

  5. Java判断回文字符串的几种方法

    文章目录 Java判断回文字符串的几种方法 1. 将字符串倒置后逐一比较,示例代码如下: 2. 将字符串倒置后创建新字符串直接比较,示例代码如下: 3. 使用截取字符串的方式比较,示例代码如下: 4. ...

  6. java语言 回文判断_java判断回文字符串的几种方法

    java判断回文字符串几种简单的实现: 1.将字符串倒置后逐一比较,实现如下: public class HuiWenTest { /** * @SERLIN */ public static voi ...

  7. java判断回文字符串几种简单的实现

    11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进 ...

  8. jsp判断字符串相等_最长回文字符串三种解法

    先解释一下什么是回文字符串,比如说字符串"aba",无论是从先往后读取还是从后往前读取,结果都是一样的.当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算 ...

  9. 回文字符串的两种判别方法(c语言)

    C语言判别回文字符的两种简单方法 文章目录 C语言判别回文字符的两种简单方法 一.回文字符串的概念 二.介绍两种判别回文字符串的方法 1.将需要判别的字符串倒序排列再与原字符串对比 2. 通过指针锁定 ...

最新文章

  1. 即学即用的30段Python实用代码
  2. 【Python学习系列七】Windows下部署Python推荐系统recsys
  3. Flex学习的利器《Hello Flex4》
  4. 华为手机连电脑_手机、电脑无网高速互传!华为神技逆天
  5. Java 面试之数据结构
  6. 闭合导线坐标计算表_RTK技术导线测量和全站仪导线测量有什么区别?
  7. mapxtreme is still in evalutation!
  8. sql SELECT时的with(nolock)选项说明
  9. 老罗Android开发视频教程 打包下载地址,收集起来,给大家下载
  10. Vue脚手架搭建以及创建Vue项目流程
  11. html渐变编织背景,CSS hover背景/文字渐变效果
  12. 程序员求职全流程指南
  13. VIS2020 长论文摘要机翻
  14. IS-IS 路由选择协议入门
  15. 【物理世界】Ψ的前世今生
  16. 关于applicaiton.yml不是绿叶子图标的处理办法
  17. 定义电竞AI,引领数据体育-火星数据
  18. 【软件】网梭浏览器v2.4.7 思路
  19. MinGW-w64下载安装2024年最新教程
  20. C# 农历日期帮助类

热门文章

  1. android如何新建登录界面,在android中创建一个登录页面
  2. 打印机无法从服务器获取信息,win10系统安装打印机提示无法从Windows Update获取设备列表怎么办...
  3. 微型计算机剪贴画图片,儿童剪贴画图片大全
  4. 业务合作与平台合作_开放组织的7个合作社业务原则
  5. System.out.println()的正确理解
  6. Linux社区:对不起,道歉无用!
  7. Oracle数据库表的基本操作以及空值问题的解决
  8. 运算放大电路的线性应用(1)
  9. 平面设计师进行海报设计怎么选择字体?
  10. 永远年轻,永远热泪盈眶!