字符串问题----判断两个字符串是否互为旋转词
判断两个字符串是否互为旋转词
如果一个字符串str,把字符串str前面的任意部分挪到后面形成的字符串叫做str的旋转词。给定两个字符串,判断是否互为旋转词。比如 a="abcd",b="cdab",true a="abcd",b="bcad",false
【解题思路】
如果长度不一样,肯定是false,如果长度一样,时间复杂度是O(N)。
方法一:直接利用String的contains 方法
方法二:看contains方法的源码,套用它的源码的方法
package com.test;/*** Created by Demrystv.*/ public class isRotation {/*** 方法一:直接利用String的contains 方法* @param a* @param b* @return*//*如果a 和b 的长度一样长,先生成一个大字符串b2, b2=b+b,即b2就是两个b 拼接起来的,然后看b2 中是否包含a,如果包含a, 说明a 和b 互为旋转词, 如果不包含,说明不是互为旋转词。*/public boolean isRotation1(String a, String b){if (a == null || b == null || a.length() != b.length()){return false;}String b2 = b + b;return b2.contains(a);// 可以看其底层实现过程 }/*** 方法二:看contains方法的源码,套用它的源码的方法* @param a* @param b* @return*/public boolean isRotation2(String a, String b){if (a == null || b == null || a.length() != b.length()){return false;}String b2 = b + b;return indexOf(b2, a, 0) > -1;}private int indexOf(String b2, String a, int index){char[] source = b2.toCharArray();char[] target = a.toCharArray();return func(source, 0, source.length, target, 0, target.length, index);}private int func(char[] source, int sourceOffset, int sourceCount,char[] target, int targetOffset, int targetCount,int fromIndex) {if (fromIndex >= sourceCount) {return (targetCount == 0 ? sourceCount : -1);}if (fromIndex < 0) {fromIndex = 0;}if (targetCount == 0) {return fromIndex;}char first = target[targetOffset];int max = sourceOffset + (sourceCount - targetCount);for (int i = sourceOffset + fromIndex; i <= max; i++) {if (source[i] != first) {while (++i <= max && source[i] != first);}if (i <= max) {int j = i + 1;int end = j + targetCount - 1;for (int k = targetOffset + 1; j < end && source[j]== target[k]; j++, k++);if (j == end) {return i - sourceOffset;}}}return -1;} }
转载于:https://www.cnblogs.com/Demrystv/p/9557641.html
字符串问题----判断两个字符串是否互为旋转词相关推荐
- 判断两个单词是否互为变位词
题目:在英语中,如果两个单词中出现的字母相同,并且每个字符出现的次数也相同,那么这两个单词互为变位词(Anagram).例如slient与listen.evil与live等互为变位词.请完成一个函数, ...
- 判断两个字符串是否为旋转词
题目:如果一个字符str,把字符str前面任意的部分挪到后面形成的字符叫做str的旋转词.比如str = "12345",str的旋转词有 "12345", & ...
- java 判断一个词是不是成语_Java 判断字符串a和b是否互为旋转词
旋转词:把字符串str的任意部分移动到后面形成的新字符串叫做字符串str的旋转词. 比如abc的旋转词有 abc,acb,cba,... 判断str1和str2是否互为旋转词,其最优解可以是时间复杂度 ...
- 7-20 判断两个字符串是否为变位词 (10 分)如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy
7-20 判断两个字符串是否为变位词 (10 分) 如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词.比如,"heart"与"earth" ...
- 判断两个字符串是否互为变形词
判断两个字符串是否互为变形词 [题目] 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词.请实现函数判断两个字符 ...
- Java判断两个字符串是否互为变形词
判断两个字符串是否互为变形词 [题目] 给定两个字符串 str I 和 str2, 如果 strl 和 str2 中出现的字符种类一样且每种字符出现的次数也 一样,那么 str l 与 str2 互为 ...
- 5.4 判断两个字符串是否互为旋转词(find函数)
[题目] 对字符串的旋转操作描述如下: 例如: str = "123456" str的所有旋转词为:"123456","234561 ...
- 判断两个字符串是否是变形词
问题: 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词.请实现函数判断两个字符串是否互为变形词. 举例: s ...
- 字符串题目 1 --------判断两个字符串是否为旋转词
题目描述 如果一个字符串为str,把字符串的前面任意部分挪到后面形成的字符串交str的旋转词.比如str="12345",str的旋转串有"12345".&qu ...
最新文章
- 天昊生物16S扩增子绝对定量测序项目文章再次登陆《Science of the Total Environment》...
- ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
- 【数据平台】sklearn库特征工程之特征选择和降维
- urllib2 python3错误?用from urllib import request来代替!
- 追求极致速度,极简多模态预训练模型ViLT,推理速度比UNITER快60倍!(ICML2021)...
- Java设计模式之迭代子模式
- 修改 Windows Host 文件工具
- Xilinx Vivado 2017.2安装教程
- js正则验证手机号码和座机号码及邮箱
- 【食安云桥】python 文件内批量长度除以3.5替换
- Word2013出现未响应的解决方法
- 程序员教你不背单词学英语!流利英语一周成!!!
- CHD搭建的环境中,解决用户权限的问题
- lob 索引 oracle,oracle 12c lob索引
- 可能是最好的设计模式入门教程——里氏替换原则
- 流式数据、批式数据、实时数据、历史数据的区别
- 企业级开发平台的演进
- gradle - Gradle tool window
- No power supply specified for netVCC in Power Rail Confiquration.
- EVERYTHING本地搜索工具