博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断字符串a和b是否互为旋转词
阅读量:6969 次
发布时间:2019-06-27

本文共 1821 字,大约阅读时间需要 6 分钟。

 

旋转词:把字符串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;        }    }}

 

转载于:https://www.cnblogs.com/tangZH/p/6655984.html

你可能感兴趣的文章
nginx中没有绑定域名(ip访问)的处理办法
查看>>
单元测试工具——JUnit
查看>>
AVI RIFF 文件参考手册
查看>>
input添加星号*
查看>>
mysql将查询结果插入新表
查看>>
PXE+HTTP+TFP+DHCP自动化部署
查看>>
源码包编译安装之--实战
查看>>
powershell 批量查询导出 组织内OU
查看>>
我的友情链接
查看>>
昨日终于考完路考了
查看>>
转:解决 linux下编译make文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录...
查看>>
Discuz 7.2坑爹集锦-PHP篇 update 20120525
查看>>
IDEA 2016.3 导入项目
查看>>
spring4+hibernate4+struts2注解,class找不到bean
查看>>
java中synchronized和Lock的区别
查看>>
python练习-数值比较
查看>>
win7,centos双系统无法启动centos,跳到grub命令行
查看>>
我的友情链接
查看>>
堆和栈的区别
查看>>
MongoDB基本命令用法
查看>>