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

问题

给定一个由多个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中利用栈实现字符串回文算法的文章就介绍到这了,更多相关字符串回文算法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    问题 给定一个由多个a和b组成的字符串数组,字符串中有一个特殊的字符X,位于字符串的正中间,例如(aaaabbbbXabaabbbb),如何判定该字符串是否回文 简单算法 定义两个下标分别指向字符串的头和尾,每次比较两个下标位置的值是否相等,如果不相等,那么输入的 字符串不是回文,如果相等,左边的下表加1,右边的下表减1,重复上述步骤直至两个下标都指向字符串的正中间或者确定字符串不是回文 /** * 判断字符串是否是回文 */ public int isPalindrome(String inp

  • JS使用栈判断给定字符串是否是回文算法示例

    本文实例讲述了JS使用栈判断给定字符串是否是回文算法.分享给大家供大家参考,具体如下: /*使用栈stack类的实现*/ function stack() { this.dataStore = [];//保存栈内元素,初始化为一个空数组 this.top = 0;//栈顶位置,初始化为0 this.push = push;//入栈 this.pop = pop;//出栈 this.peek = peek;//查看栈顶元素 this.clear = clear;//清空栈 this.length

  • Java判断字符串回文的代码实例

    首先,回文是指类似于"12345","abcdcba"的形式,即正念和反念都是一样的字符串 判断字符串是否是回文,这边介绍2种办法 1.将字符串翻转,判断翻转后的字符串和原字符串是否相等 public static void main(String[] args) { String s="abcdcba"; // 用StringBuilder的reverse方法将字符串反转 StringBuilder sb=new StringBuilder(s

  • SQL Server中利用正则表达式替换字符串的方法

    建立正则替换函数,利用了OLE对象,以下是函数代码: --如果存在则删除原有函数 IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION dbo.RegexReplace GO --开始创建正则替换函数 CREATE FUNCTION dbo.RegexReplace ( @string VARCHAR(MAX), --被替换的字符串 @pattern VARCHAR(255), --替换模板 @replacestr VARCHAR

  • java 中HttpClient传输xml字符串实例详解

    java 中HttpClient传输xml字符串实例详解 介绍:我现在有一个对象page,需要将page对象转换为xml格式并以binary方式传输到服务端 其中涉及到的技术点有: 1.对象转xml流 2.输出流转输入流 3.httpClient发送二进制流数据 POM文件依赖配置 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifact

  • java中利用反射调用另一类的private方法的简单实例

    我们知道,Java应用程序不能访问持久化类的private方法,但Hibernate没有这个限制,它能够访问各种级别的方法,如private, default, protected, public. Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectDemo {

  • Java 中利用泛型和反射机制抽象DAO的实例

    Java 中利用泛型和反射机制抽象DAO的实例 一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升 1.通用接口 import java.io.Serializable; import java.util.List; public interface BaseDao<T> { T get(Serializable id); List<

  • java中stack(栈)的使用代码实例

    java中stack类继承于vector,其特性为后进先出(lastinfirstout). 入栈和出栈实例图: 实例图的java代码实例: package com.lanhuigu.java.ListTest; import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack<String> staffs = new Stack<String>(); //

  • Java中读取文件转换为字符串的方法

    方式一 /** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. 当然也是可以读字符串的. */ /* 貌似是说网络环境中比较复杂,每次传过来的字符是定长的,用这种方式?*/ public String readString1() { try { //FileInputStream 用于读取诸如图像数据之类的原始字节流.要读取字符流,请考虑使用 FileReader. FileInputStream inStream=this.openFileInput(FILE_NAME)

  • Java中利用POI优雅的导出Excel文件详解

    前言 故事是这样开始的: 公司给排了几天的工期,让完成 2 个功能模块的开发.其中有一个场景是这样的,从 Excel 导入数据,要求数据不能重复.用户可以下载导入失败的 Excel 文件. 这样就有 2 种实现 将失败数据存储数据库,需要下载时生成 Excel 下载即可 将失败数据生成 Excel 文件存储文件服务器,然后返回下载链接. 老大要求按方案二进行.好吧,导出 Excel 是再常见不过的功能了,然而总是觉得以前写的不够优雅,所以决定进行简单的封装,以适应简单场景的 Excel 导出.

随机推荐