旋转词:把字符串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 判断一个词是不是成语_Java 判断字符串a和b是否互为旋转词相关推荐

  1. java 判断一个文件是否存在_java判断某个文件是否存在的方法

    java判断某个文件是否存在的方法 发布时间:2020-06-25 17:09:42 来源:亿速云 阅读:119 作者:Leah 这篇文章运用简单易懂的例子给大家介绍java判断某个文件是否存在的方法 ...

  2. 字符串问题----判断两个字符串是否互为旋转词

    判断两个字符串是否互为旋转词 如果一个字符串str,把字符串str前面的任意部分挪到后面形成的字符串叫做str的旋转词.给定两个字符串,判断是否互为旋转词.比如 a="abcd", ...

  3. java怎么判断json是否为空_java判断jsonObject和jsonArray是否为空

    resJsonObj = {"res":"0","msg":"","data":{"Nam ...

  4. java怎么判断对象不为空_java判断对象是否为空的方法

    java判断对象是否为空的方法 发布时间:2020-06-25 14:39:17 来源:亿速云 阅读:134 作者:Leah 这篇文章将为大家详细讲解有关java判断对象是否为空的方法,文章内容质量较 ...

  5. mysql判断当前日期是否为节假日_java 判断日期是否是节假日

    1.新建一个excel命名为"节假日.xls"存放节假日,模板格式如下 2.判断是否是节假日的类 工作日返回true ,休息日返回false. 需要引用poi-bin-3.9包,包 ...

  6. 5.4 判断两个字符串是否互为旋转词(find函数)

    [题目]     对字符串的旋转操作描述如下:      例如: str = "123456" str的所有旋转词为:"123456","234561 ...

  7. 【C++】35.判断一个文件是否存在、 查找字符串中的子串

    1.判断一个文件是否存在,IsFileExists() bool IsFileExists(const std::string &file_name) {std::ifstream fin(f ...

  8. java中String类是什么_Java中字符串的学习(一)String类的概述及常见方法使用

    转载请注明出处http://www.cnblogs.com/devtrees/p/4347079.html (拓展:Api:编程语言对外给我们提供的应用程序接口.) 一.概述: 我们平时上网发帖,帖子 ...

  9. java判断一个文件有多少行_Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)...

    要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释 ...

最新文章

  1. 中国工业机器视觉产业发展白皮书(附ppt)
  2. html如何呈现在显示器,lcd显示器采用什么显示方式
  3. springboot 问题总结
  4. asp.net怎样解决高并发问题
  5. ubuntu16.04备份和恢复系统
  6. 13. PHP 表数据入口(table data gateway)
  7. 廖雪峰Python 3.X 教程
  8. 10种JavaScript特效实例让你的网站更吸引人
  9. oracle11g怎么打开oem,oracle11g启动OEM
  10. Spring的全局(统一)异常处理
  11. pt-archiver归档数据 源库和目标库是否会出现不一致
  12. 使用基础版SYD8811 Smart EVK测量SYD8811芯片功耗的说明
  13. Just for a stripe of blue sky!
  14. mysql知识系列:报错right syntax to use near IDENTIFIED BY
  15. 带库的pydroid安装与使用。
  16. 计算机软件研究方法与技术路线,开题报告研究方法与技术路线.doc
  17. k8s中通过Jenkins蓝绿/灰度发布微服务
  18. 【3y原创】什么是保险
  19. split-horizon产生的路由欺骗
  20. mini车f和r的区别_MINI 是一种怎样的车?

热门文章

  1. 又见程序媛 | 从索引的创建角度分析热门“面试题”
  2. GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
  3. 还不会使用分布式锁?教你三种分布式锁实现的方式
  4. 华为云登顶HotpotQA多跳知识推理问答评测
  5. JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据【华为云分享】
  6. 【开发者portal在线开发插件系列四】数组 及 可变长度数组
  7. 【华为云实战开发】9.如何进行PHP项目的快速搭建并实现CICD?
  8. 【华为云实战开发】8.如何快速搭建C#网站并实现持续集成?
  9. 暴雪插件占用服务器,暴雪为部分高负载、高排队的服务器开启免费转服服务 解决负载过高问题...
  10. oracle数据库看开销,【Database】AIX系统下跟踪开销大的Oracle数据库进程