精华内容
下载资源
问答
  • 作者 |磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)回文字符串判断是面试和笔试中常见的面试题之一,同时也是 LeetCode 中一道经典的面试题,那么本文我们就来看一下什么是回文...

    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 就可以实现,并且它的实现代码也很简单易懂。

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

    展开全文
  • java判断回文字符串几种简单的实现:1.将字符串倒置后逐一比较,实现如下:public class HuiWenTest {/*** @SERLIN*/public static void main(String[] args) {String str = "";System.out.println("请输入一个字符串")...

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

    1.将字符串倒置后逐一比较,实现如下:

    public class HuiWenTest {

    /**

    * @SERLIN

    */

    public static void main(String[] args) {

    String str = "";

    System.out.println("请输入一个字符串");

    Scanner input = new Scanner(System.in);

    str = input.next();

    StringBuffer sb = new StringBuffer(str);

    sb.reverse();// 将Str中的字符串倒置

    int count = 0;

    for (int i = 0; i < str.length(); i++) {

    if (str.charAt(i) == sb.charAt(i)) {

    count++;

    }

    }

    if (count == str.length()) {

    System.out.println("此字符串是一个回文字符串");

    } else {

    System.out.println("此字符串不是一个回文字符串");

    }

    }

    }

    2.将字符串倒置后创建新字符串直接比较,实现如下:

    public class HuiWenTest2 {

    /**

    * @SERLIN

    */

    public static void main(String[] args) {

    System.out.println("请输入一个字符串");

    Scanner input = new Scanner(System.in);

    String str = input.next();

    StringBuilder sb=new StringBuilder(str);

    sb.reverse();//将str倒置的方法

    String newStr=new String(sb);

    if(str.equals(newStr)){

    System.out.println(str+"是回文字符串");

    }else{

    System.out.println(str+"不是回文字符串");

    }

    }

    }

    3.使用截取字符串的方式比较,实现如下:

    public class HuiWenTest3 {

    /**

    * @SERLIN

    */

    public static void main(String[] args) {

    System.out.println("请输入一个字符串");

    Scanner input = new Scanner(System.in);

    String str = input.next();

    int count = 0;

    for (int i = 0; i < str.length() / 2; i++) {

    if ((str.substring(i, i + 1)).equals(str.substring(str.length() - 1- i, str.length() - i))) {

    count++;

    }

    }

    if (count == str.length() / 2) {

    System.out.println("是回文字符串");

    }else{

    System.out.println("不是回文字符串");

    }

    }

    }

    4.判断回文数字(判断纯数字),实现如下

    public class HuiWenNum {

    /**

    * @SERLIN

    */

    public static void main(String[] args) {

    int n;

    System.out.println("请输入一个整数:");

    // 如果结果为回文数,跳出循环

    while (true) {

    Scanner InpuNum = new Scanner(System.in);

    n = InpuNum.nextInt();

    if (isHuiWen(n)) {

    System.out.println(n + "是回文数!");

    break;

    } else {

    System.out.println(n + "不是回文数!");

    }

    }

    }

    // 判断的数字是否是回文数

    public static boolean isHuiWen(int n) {

    int m = reverse(n);

    if (m == n) {

    return true;

    } else {

    return false;

    }

    }

    // 将输入的数字进行倒置,以便进行判断是否是回文数

    public static int reverse(int n) {

    int temp = 0;// 临时变量

    int j = 0;// 倒置后的数字

    temp = n;// 将输入的数字赋值给临时变量

    while (temp != 0) {

    j = j * 10 + temp % 10;

    temp /= 10;

    }

    return j;

    }

    }

    当然,还能先将数字转为字符串再判断,方法同上面的字符串判断一样.

    除了上面的方法,当然还有其他很多,比如使用递归等.

    也可以自己实现倒序字符串方法,如果大家有更好,更高效的方法希望能贴出来,大家一起学习!

    smile.gif

    smile.gif

    smile.gif

    展开全文
  • 第二点,考虑什么是回文字符串。我开始的思路也出了一些偏差,认为回文的意思在于只要出现成对的字母就可以了。但深刻理解发现回文的意思在于除了字符串中的标点符号以外字符和数字能够正反读取都是一样的(当然题目...

    这题总体来说并不难,

    第一点,首先是要考虑字符串中标点符号对字符串的影响。

    第二点,考虑什么是回文字符串。我开始的思路也出了一些偏差,认为回文的意思在于只要出现成对的字母就可以了。但深刻理解发现回文的意思在于除了字符串中的标点符号以外字符和数字能够正反读取都是一样的(当然题目要求大小写字母都可以)。有了这点理解,所想到的是讲字符串转化为数组,并通过两边的指针往中间靠拢,判断是否一致(中间过滤掉字符串)。

    验证回文字符串是比较常见的问题,所谓回文,就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。但是这里,加入了空格和非字母数字的字符,增加了些难度,但其实原理还是很简单:只需要建立两个指针,left和right, 分别从字符的开头和结尾处开始遍历整个字符串,如果遇到非字母数字的字符就跳过,继续往下找,直到找到下一个字母数字或者结束遍历,如果遇到大写字母,就将其转为小写。等左右指针都找到字母数字时,比较这两个字符,若相等,则继续比较下面两个分别找到的字母数字,若不相等,直接返回false.

    时间复杂度为O(n)

    )

    所以在Java中所需要用到的知识为:

    1.将字符串转为数组。

    2.用到Character.isLetterOrDigit判断字符是否是数字和字符

    3.字母的小写化 Characte.toLowerCase

    public boolean isPalindrome(String s) {

    char[] cha = s.toCharArray();

    int i = 0, j = cha.length - 1;

    while(i < j){

    if(!Character.isLetterOrDigit(cha[i]))

    i++;

    else if(!Character.isLetterOrDigit(cha[j]))

    j--;

    else

    if(Character.toLowerCase(cha[i]) == Character.toLowerCase(cha[j])){

    i++;

    j--;

    }else{

    return false;

    }

    }

    return true;

    }

    展开全文
  • Java 判断回文字符串

    2021-04-01 14:39:02
    Java 判断回文字符串
    package chapter3;
    import java.util.Scanner;
    /****************************************************************
     * Author:icyn
     * Description: 回文数字 is a palindrome
     * others:别忘了给游标 j设置成sNumber.length()-1
     * Date:2021/4/1 下午
     * Test:
    Enter a three-digit integer:
    121
    121 is a palindrome
    Enter a three-digit integer:
    123
    123 is not a palindrome
     * ***************************************************************
     */
    public class exc3_12 {
    	
    	public static void main(String[] args) {
    		
    		Scanner input=new Scanner(System.in);
    		
    		//将读入的字符串转换成字符数组
    		System.out.println("Enter a three-digit integer:");
    		String sNumber=input.next();
    		char[]   cArray=sNumber.toCharArray();
    		
    		int i=0,j=sNumber.length()-1;
    		
    		while(i<j&&cArray[i]==cArray[j]) {
    			i++;
    			j--;	
    		}
    		
    		if(i<j) {
    			System.out.println(sNumber+" is not a palindrome");
    		}else {
    			System.out.println(sNumber+" is a palindrome");
    		}
    		
    	}
    	
    }
    
    
    展开全文
  • 判断回文字符串

    2021-01-15 22:01:26
    问题描述:如何判断回文字符串? 什么是回文字符串? 如果一个字符串从前向后读和从后向前读,都是一个字符串称为回文字符串。 例如:mom,dad,opo等。 package work_15; import java.util.Scanner; public class ...
  • 首先介绍下什么是回文字符串回文字符串就是关于中心对称的字符串,比如 测试下
  • java判断回文字符串几种简单的实现

    万次阅读 多人点赞 2017-10-18 00:49:49
    java判断回文字符串几种简单的实现
  • 首先,回文是指类似于“12345”,“abcdcba”的形式,即正念和反念都是一样的字符串判断字符串是否是回文,这边介绍2种办法1、将字符串翻转,判断翻转后的字符串和原字符串是否相等public static void main(String[]...
  • JAVA算法:回文字符串相关问题详解(回文字符串总结) Q1. 编写一个工具方法判断给定的字符串是否为回文字符串 例如:给定一个字符串“aabbaa”,判断该字符串是否为回文字符串。 算法设计如下: /* * 给定...
  • java判断字符串是否是回文数的方法发布时间:2020-06-28 14:07:16来源:亿速云阅读:95作者:元一本篇文章给大家分享的是有关java判断字符串是否是回文数的方法,小编觉得挺实用的,因此分享给大家学习,希望大家...
  • Java判断回文字符串

    2020-03-30 12:01:15
    public class Palindrome { public static boolean isPalindrome(String s) { int len = s.length(); for (int i = 0; i < len / 2; i++) if (s.charAt(i) != s.charAt(len - i...
  • java判断回文字符串的几种方法

    万次阅读 多人点赞 2014-07-22 16:45:43
    java判断回文字符串几种简单的实现: 1.将字符串倒置后逐一比较,实现如下: public class HuiWenTest { /** * @SERLIN */ public static void main(String[] args) { String str = ""; System.out....
  • 判断是否回文字符串方法一:传统两个指针 begin---end; str.charAt(begin)==str.charAt(end) 不能用str[begin]==str[end];没有这种用法; String str import java.util.Scanner; public class Main{ public ...
  • 回文定义:“回文字符串”就是正读倒读都一样的字符串。如字符串“Abcd121dcba”是一段回文字符串。 实现方法:将字符串分成两部分并转换为字符数组,从字符串数组的两端逐个进行比较。 实现代码: public class...
  • public class ValidPalindrome { //判断是否为回文字符串 public static boolean isPalindrome(String s,int i,int j){ while(i<j){ if(s.charAt(i++)!=s.charAt(j--)){ retu...
  • 题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"我知道的有两种方法,还有几种,我...
  • //判断回文字符串的方法//将字符串倒置后逐一比较 public class HuiWenTest { public static void main(String[] args) { String string = ""; System.out.println("请输入一个字符...
  • 目的:在任意的字符串中求出最长的回文字符串 思路:(适用于任何语言) 1、判断当前给定的字符串是否是相同的字符串(也就是所有字符都相同),如果是直接返回了。 2、如果第一步没有返回,就以非第一个...
  • “xyxzyx”是一个回文字符串,所谓回文字符串就是指正读反读均相同的字符序列,通过栈这个数据结构判断一个字符串是否是回文字符串。 输入:xyzyx 输出:yes 示例代码如下: import java.util....
  •  该代码的功能可以实现对任意的一段字符串进行判断是否有回文回文有哪些,和其中的最大回文。 二、代码部分 1、全局变量 1 static String hws = ""; 2 static int num = 0; 3 static String[] hw; 2、...
  • Java判断字符串回文的代码实例发布于 2020-12-28|复制链接在本篇文章里小妖给各位整理的是一篇关于Java判断字符串回文的代码实例内容,需要的朋友们可以跟着学习参考下。首先,回文是指类似于“12345”,“abcdcba”...
  • 问题给定一个由多个a和b组成的字符串数组,...如果不相等,那么输入的字符串不是回文,如果相等,左边的下表加1,右边的下表减1,重复上述步骤直至两个下标都指向字符串的正中间或者确定字符串不是回文/*** 判断字符...
  • 回文字符串就是将该字符串进行逆序处理后,仍然与原字符串一样 如:abcdcba、12321、雾锁山头山锁雾 第一种方法 利用字符串的下标,判断第一个字符与最后一个字符是否相同,第二个字符与倒数第二个字符是否相同,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 716
精华内容 286
关键字:

判断回文字符串java

java 订阅