书籍判断两个字符串是否互为旋转词

server/2024/10/20 10:53:02/

题目

如果一个字符串str,把字符串str前面任意的部分挪到后面形成的字符串叫作str的旋转词。比如str=“12345”,str的旋转词有“12345”,“23451”,“34512”,“45123”和“51234”。给定两个字符串a和b,请判断a和b是否互为旋转词。

举例

a=“cdab”,b=“abcd” 返回true

a=“1ab2”,b=“ab12” 返回false

a=“2ab1”,b=“ab12” 返回true

如果a和b长度不一样,那么a和b必然不互为旋转词,可以直接返回false。当a和b长度一样,都为N时,要求解法的时间复杂度为O(N).

如果a和b长度一样,先生成一个大字符串b2,b2是两个字符串b拼在一起的结果,即String b2 = b +b。

java">public class KMP {public static boolean isRotation(String a, String b) {if(a == null || b == null || a.length() != b.length()){return false;}String b2 = b + b;return kmpSearch(b2, a) != -1;}public static int[] compteNext(String pattern) {int[] next = new int[pattern.length()];int j = 0;next[0] = j;for (int i = 1; i < pattern.length(); i++) {while (j > 0 && pattern.charAt(i)!= pattern.charAt(j)) {j = next[j - 1];}if (pattern.charAt(i) == pattern.charAt(j)) {j++;}next[i] = j;}return next;}public static int kmpSearch(String text, String pattern) {int[] next = compteNext(pattern);int i = 0, j = 0;while (i < text.length() && j < pattern.length()) {if (text.charAt(i) == pattern.charAt(j)) {i++;j++;} else if (j > 0) {j = next[j - 1];} else {i++;}}if (j == pattern.length()) {return i - j;} else {return -1;}}public static void main(String[] args) {String text = "cdab";String pattern = "abcd";System.out.println("Pattern found at : " + isRotation(text, pattern));}
}


http://www.ppmy.cn/server/95414.html

相关文章

魔众文库-PHP文库管理系统

魔众文库是一套基于PHPMYSQL开发的适用于多平台的文档管理系统&#xff0c;提供doc、ppt、excel、pdf、压缩包、图片、CAD 等资源的在线预览和下载&#xff0c;文件被转换为H5或图片格式&#xff0c;文字放大无失真&#xff0c;响应速度更快速对SEO更友好&#xff0c;收录更快、…

面向对象编程:一切皆对象

面向对象(OOP)是一种编程范式,它使用对象来设计软件。对象可以包含数据和代码&#xff1a;数据代表对象的状态&#xff0c;而代码代表操作数据的方式。在面向对象编程中&#xff0c;一切皆对象&#xff0c;这意味着将现实世界事务使用类与实例来模拟&#xff0c;如灯&#xff0…

如何使用nodejs的fsPromise.access()判断文件权限

同学们可以私信我加入学习群&#xff01; 正文开始 一种错误示范fsPromise.access正确的书写总结 一种错误示范 我们操作文件的时候&#xff0c;经常需要提前判断文件的状态&#xff1a;文件是否存在、文件是否可读、文件是否可写。 查看官网介绍后&#xff0c;按照我们平时的…

基于JAVA的商品供应管理系统-JavaEE

点击下载源码 基于JAVA的商品供应管理系统-JavaEE 摘 要 当今社会己进入信息社会时代&#xff0c;信息己经受到社会的广泛关注&#xff0c;被看作社会和科学技术发展的三大支柱&#xff08;材料、能源、信息&#xff09;之一。信息是管理的基础&#xff0c;是进行决策的基本依…

基于Protobuf的RPC

先上UserServer提供服务的函数要求proto文件内容&#xff1a; syntax"proto3"; package fixbug; option cc_generic_servicestrue; message LoginRequest {bytes name1;bytes pwd2; } message LoginResponse {ResultCode result1;bool sucess2; } #调用远程服务的入…

Python数据库连接全解析:5大方案实战对比

在本文中&#xff0c;我们将通过实际示例&#xff0c;深入探讨Python中5种主流的数据库连接方案。这些例子将帮助您更好地理解每种方法的特点和适用场景。 目录 不同方案说明1. DB-API&#xff1a;以sqlite3为例2. SQLAlchemy&#xff1a;ORM示例3. psycopg2&#xff1a;Postgr…

美团2024年春招第一场笔试[测开方向],编程题+选择题详解,ACM式C++解法

编程题&选择题 编程题小美的平衡矩阵思路代码 小美的数组询问思路代码 验证工号思路代码 选择题1.在计算机网络中&#xff0c;端口号的作用是什么2.HTTPS协议通过使用哪些机制来确保通信的安全性3.Etag用于标识资源的唯一标识符&#xff0c;他可以用于4.在一个单道系统中&a…

深信服day9:文件后缀名和Cookie和前后端地址区别

一、文件后缀名 ISO&#xff1a;镜像文件 RAR&#xff1a;压缩包 html&#xff1a;网页 zip&#xff1a;压缩包 exe&#xff1a;可执行文件 pdf&#xff1a;pdf文档 rm&#xff1a;视频文件 avi&#xff1a;视频文件 tmp&#xff1a;临时文件 mdf&#xff1a;虚拟光驱…