java中利用栈实现字符串回文算法

 更新时间:2020年12月04日 17:40:09   作者:阿飞Sirx  
给定一个由多个a和b组成的字符串数组,字符串中有一个特殊的字符X,位于字符串的正中间,例如(aaaabbbbXabaabbbb),如何判定该字符串是否回文

问题

给定一个由多个a和b组成的字符串数组,字符串中有一个特殊的字符X,位于字符串的正中间,例如(aaaabbbbXabaabbbb),如何判定该字符串是否回文

简单算法

定义两个下标分别指向字符串的头和尾,每次比较两个下标位置的值是否相等,如果不相等,那么输入的
字符串不是回文,如果相等,左边的下表加1,右边的下表减1,重复上述步骤直至两个下标都指向字符串的正中间或者确定字符串不是回文

  /**
   * 判断字符串是否是回文
   */
  public int isPalindrome(String inputStr) {
    int i = 0;
    int j = inputStr.length();
    char[] chars = inputStr.toCharArray();
    while (i < j && chars[i] == chars[j]) {
      i++;
      j--;
    }
    if (i < j) {
      System.out.println("Not a Palindrome");
      return 0;
    } else {
      System.out.println("Palindrome");
      return 1;
    }
  }

利用栈判断是否回文

1.遍历字符数组,
2.在遍历过程中将经过的每个字符(X以前的字符)入栈
3.对于链表的后一半,把每个元素与栈顶元素比较,如果相等,执行一次出栈操作,并且移动到下一个元素继续比较
4.如果比较时出现不相等,那么输入的字符串不是回文
5.继续这个过程,直至栈空或者字符串不是回文

  /**
   * 利用栈判断字符回文
   */
  public boolean isPalindromeWithStack(String inputStr) {
    char[] inputChar = inputStr.toCharArray();
    LinkedListStack s = new LinkedListStack();
    int i = 0;
    while (inputChar[i] != 'X') {
      s.push(inputChar[i]);
      i++;
    }
    i++;
    while (i < inputChar.length) {
      if (s.isEmpty())
        return false;
      if (inputChar[i] != s.pop()) {
        return false;
      }
      i++;
    }
    //将来
    return true;
  }

Java判断是否为回文字符串

题目描述

输入一段字符串序列,字符串可能包括字母,数字,标点符号等类型字符,在判断该字符序列是否为回文时,只需判断字母和数字类型,其它类型自动忽略。
如:“A man, a plan, a canal: Panama” 是一段回文字符串
“race a car”则不是回文字符串

实现方法

从字符串的两端逐个进行比较,若遇到非字母或数字字符则将索引值加一或减一,如果两端字符不同,直接返回false,直到索引值在中间相遇也没有返回false则证明该字符串是回文字符串。

public static boolean isPalindrome(String str){
    if(str.equals(""))
      return true;
    str = str.toLowerCase();//将字符串的所有大写字母转小写
    int start = 0, end = str.length() - 1;

    //从字符两端分别逐个对比字符,不同则直接返回false
    while (start < end){
      //过滤掉非字母和数字字符
      while (!(str.charAt(start) >= 'a' && str.charAt(start) <= 'z' || str.charAt(start) >= '0' && str.charAt(start) <= '9'))
        start++;
      //过滤掉非字母和数字字符
      while (!(str.charAt(end) >= 'a' && str.charAt(end) <= 'z' || str.charAt(end) >= '0' && str.charAt(end) <= '9'))
        end--;
      //若字符不同,则直接返回false
      if(str.charAt(start) != str.charAt(end))
        return false;
      start++;
      end--;
    }
    return true;
  }

编程判断字符串是否为回文 判断一个字符串是否是回文,例如单词‘level'

#include <stdio.h>
#include <string.h>

int main()
{
char a[100]= {0};
int i = 0;
int len = 0;
printf("please input character string:\n");
gets(a);
len = strlen(a); //计算输入字符串的长度;
for(i = 0; i < (len / 2); i++) //只需要判断前一半(len/2)长度就好了
{ 
if(a[i] != a[len - 1 - i]) //判断是否为回文数;
{
printf("不是回文数\n");
return 0;
}
}
printf("是回文数\n");
return 0;
}

到此这篇关于java中利用栈实现字符串回文算法的文章就介绍到这了,更多相关字符串回文算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合rockerMQ消息队列详解

    SpringBoot整合rockerMQ消息队列详解

    今天和大家一起深入生产级别消息中间件 - RocketMQ 的内核实现,来看看真正落地能支撑万亿级消息容量、低延迟的消息队列到底是如何设计的。我会先介绍整体的架构设计,然后再深入各核心模块的详细设计、核心流程的剖析
    2022-07-07
  • Java分层概念详解

    Java分层概念详解

    这篇文章主要介绍了Java分层概念详解,内容十分详细,在这里给大家分享下,需要的朋友可以参考。
    2017-09-09
  • Netty分布式从recycler对象回收站获取对象过程剖析

    Netty分布式从recycler对象回收站获取对象过程剖析

    这篇文章主要为大家介绍了Netty分布式从recycler获取对象的过程源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • SpringBoot实现MQTT消息发送和接收方式

    SpringBoot实现MQTT消息发送和接收方式

    这篇文章主要介绍了SpringBoot实现MQTT消息发送和接收方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 使用 Java 开发 Gradle 插件的步骤

    使用 Java 开发 Gradle 插件的步骤

    这篇文章主要介绍了使用 Java 开发 Gradle 插件的步骤,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • 解决springboot MultipartFile文件上传遇到的问题

    解决springboot MultipartFile文件上传遇到的问题

    本文给大家带来了解决springboot MultipartFile文件上传遇到的问题,解决方法超简单,感兴趣的朋友参考下本文
    2018-08-08
  • java实现的连接oracle/mysql数据库功能简单示例【附oracle+mysql数据库驱动包】

    java实现的连接oracle/mysql数据库功能简单示例【附oracle+mysql数据库驱动包】

    这篇文章主要介绍了java实现的连接oracle/mysql数据库功能,结合实例形式分析了java基于jdbc连接Oracle与mysql的相关操作技巧,并附带完整实例代码与oracle+mysql数据库驱动包供读者下载参考,需要的朋友可以参考下
    2017-10-10
  • SpringBoot 导出数据生成excel文件返回方式

    SpringBoot 导出数据生成excel文件返回方式

    这篇文章主要介绍了SpringBoot 导出数据生成excel文件返回方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Spring 加载 Application Context五种方式小结

    Spring 加载 Application Context五种方式小结

    这篇文章主要介绍了Spring 加载 Application Context五种方式小结,具有很好的参考价值,希望对大家有所帮助。
    2022-01-01
  • JVM要双亲委派的原因及如何打破它

    JVM要双亲委派的原因及如何打破它

    平时做业务开发比较少接触类加载器,但是如果想深入学习,了解类加载的原理是必不可少的.java的类加载器有哪些?什么是双亲委派?为什么要双亲委派?如何打破它?接下来本文就带大家详细介绍这些知识 ,需要的朋友可以参考下
    2021-06-06

最新评论