java 判断一个词是不是成语_Java 判断字符串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 判断一个词是不是成语_Java 判断字符串a和b是否互为旋转词相关推荐
- java 判断一个文件是否存在_java判断某个文件是否存在的方法
java判断某个文件是否存在的方法 发布时间:2020-06-25 17:09:42 来源:亿速云 阅读:119 作者:Leah 这篇文章运用简单易懂的例子给大家介绍java判断某个文件是否存在的方法 ...
- 字符串问题----判断两个字符串是否互为旋转词
判断两个字符串是否互为旋转词 如果一个字符串str,把字符串str前面的任意部分挪到后面形成的字符串叫做str的旋转词.给定两个字符串,判断是否互为旋转词.比如 a="abcd", ...
- java怎么判断json是否为空_java判断jsonObject和jsonArray是否为空
resJsonObj = {"res":"0","msg":"","data":{"Nam ...
- java怎么判断对象不为空_java判断对象是否为空的方法
java判断对象是否为空的方法 发布时间:2020-06-25 14:39:17 来源:亿速云 阅读:134 作者:Leah 这篇文章将为大家详细讲解有关java判断对象是否为空的方法,文章内容质量较 ...
- mysql判断当前日期是否为节假日_java 判断日期是否是节假日
1.新建一个excel命名为"节假日.xls"存放节假日,模板格式如下 2.判断是否是节假日的类 工作日返回true ,休息日返回false. 需要引用poi-bin-3.9包,包 ...
- 5.4 判断两个字符串是否互为旋转词(find函数)
[题目] 对字符串的旋转操作描述如下: 例如: str = "123456" str的所有旋转词为:"123456","234561 ...
- 【C++】35.判断一个文件是否存在、 查找字符串中的子串
1.判断一个文件是否存在,IsFileExists() bool IsFileExists(const std::string &file_name) {std::ifstream fin(f ...
- java中String类是什么_Java中字符串的学习(一)String类的概述及常见方法使用
转载请注明出处http://www.cnblogs.com/devtrees/p/4347079.html (拓展:Api:编程语言对外给我们提供的应用程序接口.) 一.概述: 我们平时上网发帖,帖子 ...
- java判断一个文件有多少行_Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)...
要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释 ...
最新文章
- 中国工业机器视觉产业发展白皮书(附ppt)
- html如何呈现在显示器,lcd显示器采用什么显示方式
- springboot 问题总结
- asp.net怎样解决高并发问题
- ubuntu16.04备份和恢复系统
- 13. PHP 表数据入口(table data gateway)
- 廖雪峰Python 3.X 教程
- 10种JavaScript特效实例让你的网站更吸引人
- oracle11g怎么打开oem,oracle11g启动OEM
- Spring的全局(统一)异常处理
- pt-archiver归档数据 源库和目标库是否会出现不一致
- 使用基础版SYD8811 Smart EVK测量SYD8811芯片功耗的说明
- Just for a stripe of blue sky!
- mysql知识系列:报错right syntax to use near IDENTIFIED BY
- 带库的pydroid安装与使用。
- 计算机软件研究方法与技术路线,开题报告研究方法与技术路线.doc
- k8s中通过Jenkins蓝绿/灰度发布微服务
- 【3y原创】什么是保险
- split-horizon产生的路由欺骗
- mini车f和r的区别_MINI 是一种怎样的车?
热门文章
- 又见程序媛 | 从索引的创建角度分析热门“面试题”
- GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
- 还不会使用分布式锁?教你三种分布式锁实现的方式
- 华为云登顶HotpotQA多跳知识推理问答评测
- JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据【华为云分享】
- 【开发者portal在线开发插件系列四】数组 及 可变长度数组
- 【华为云实战开发】9.如何进行PHP项目的快速搭建并实现CICD?
- 【华为云实战开发】8.如何快速搭建C#网站并实现持续集成?
- 暴雪插件占用服务器,暴雪为部分高负载、高排队的服务器开启免费转服服务 解决负载过高问题...
- oracle数据库看开销,【Database】AIX系统下跟踪开销大的Oracle数据库进程