Java 判断字符串a和b是否互为旋转词

 更新时间:2017年05月14日 08:50:12   作者:妖久  
本篇文章主要介绍了判断字符串a和b是否互为旋转词的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧

旋转词:把字符串str的任意部分移动到后面形成的新字符串叫做字符串str的旋转词。

比如abc的旋转词有 abc,acb,cba,...

判断str1和str2是否互为旋转词,其最优解可以是时间复杂度为O(n)(n为字符串的长度)

方法如下:

1、判断长度是否相等

2、长度相等的话就构建大字符串,str1+str1(str1+str1中包含了str1的所有旋转词)

3、用KPM算法判断大字符串中是否包含str2

下面是具体算法实现,必须先了解KPM算法才行

package k;

import java.util.Scanner;

public class test1 {
 static int[] next; //next数组
 static String str1; //字符串str1
 static String str2; //字符串str2
 static String str; //字符串str=str1+str1

 public static void main(String[] args) {
  Scanner in = new Scanner(System.in);

  str1 = in.next(); //获取输入的第一个字符串
  str2 = in.next(); //获取输入的第二个字符串

  if (str1.length() != str2.length()) //如果长度不相等,那么就肯定不是互为旋转词
   System.out.println(str1 + "与" + str2 + "不是互为旋转词");
  
  else 
  {
   str = str1 + str1; 
   makeNext(); //构建next数组
 
   check(); //判断是否为旋转词
  }
 }

 private static void check() {
  int i = 0;
  int j = 0;
  while (i < str2.length() && j < str.length()) 
   if (i == -1 || str2.charAt(i) == str.charAt(j)) {
    i++;
    j++;
   } else {
    i = next[i];
   }
   if (i >= str2.length())
    System.out.println(str1 + "与" + str2 + "互为旋转词");
   else 
    System.out.println(str1 + "与" + str2 + "不是互为旋转词");
 }

 private static void makeNext() {
  next = new int[str2.length()];
  int i = 0;
  int k = -1;
  next[0] = -1;
  while (i < str2.length() - 1) {
   while (k >= 0 && str2.charAt(i) != str2.charAt(k))
    k = next[k];
   i++;
   k++;
   if (str2.charAt(i) == str2.charAt(k))
    next[i] = next[k];
   else
    next[i] = k;
  }
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • java中应用Stack进行算术运算的操作

    java中应用Stack进行算术运算的操作

    这篇文章主要介绍了java中应用Stack进行算术运算的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Java如何导出数据库中的所有数据表到指定文件夹

    Java如何导出数据库中的所有数据表到指定文件夹

    这篇文章主要介绍了Java导出数据库中的所有数据表到指定文件夹,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • springboot返回modelandview页面的实例

    springboot返回modelandview页面的实例

    这篇文章主要介绍了springboot返回modelandview页面的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 解决SpringBoot ClassPathResource的大坑(FileNotFoundException)

    解决SpringBoot ClassPathResource的大坑(FileNotFoundException)

    这篇文章主要介绍了解决SpringBoot ClassPathResource的大坑(FileNotFoundException),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java学习笔记之eclipse+tomcat 配置

    java学习笔记之eclipse+tomcat 配置

    俗话说:工欲善其事必先利其器,既然要学习java,首先把java的开发环境捣鼓一下吧,这里我们来谈谈eclipse+tomcat的配置方法。
    2014-11-11
  • Java中PropertyDescriptor的用法及说明

    Java中PropertyDescriptor的用法及说明

    这篇文章主要介绍了Java中PropertyDescriptor的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java毕业设计实战之医院心理咨询问诊系统的实现

    Java毕业设计实战之医院心理咨询问诊系统的实现

    这是一个使用了java+Spring+Maven+mybatis+Vue+mysql开发的医院心理咨询问诊系统,是一个毕业设计的实战练习,具有心理咨询问诊该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • controller层如何同时接收两个实体类

    controller层如何同时接收两个实体类

    这篇文章主要介绍了controller层如何同时接收两个实体类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • SpringBoot基于Redis实现生成全局唯一ID的方法

    SpringBoot基于Redis实现生成全局唯一ID的方法

    在项目中生成全局唯一ID有很多好处,生成全局唯一ID有助于提高系统的可用性、数据的完整性和安全性,同时也方便数据的管理和分析,所以本文给大家介绍了SpringBoot基于Redis实现生成全局唯一ID的方法,文中有详细的代码讲解,需要的朋友可以参考下
    2023-12-12
  • mybatisplus驼峰命名映射的问题解决

    mybatisplus驼峰命名映射的问题解决

    本文主要介绍了mybatisplus驼峰命名映射的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论