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

  

  如果一个字符串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

字符串问题----判断两个字符串是否互为旋转词相关推荐

  1. 判断两个单词是否互为变位词

    题目:在英语中,如果两个单词中出现的字母相同,并且每个字符出现的次数也相同,那么这两个单词互为变位词(Anagram).例如slient与listen.evil与live等互为变位词.请完成一个函数, ...

  2. 判断两个字符串是否为旋转词

    题目:如果一个字符str,把字符str前面任意的部分挪到后面形成的字符叫做str的旋转词.比如str = "12345",str的旋转词有 "12345", & ...

  3. java 判断一个词是不是成语_Java 判断字符串a和b是否互为旋转词

    旋转词:把字符串str的任意部分移动到后面形成的新字符串叫做字符串str的旋转词. 比如abc的旋转词有 abc,acb,cba,... 判断str1和str2是否互为旋转词,其最优解可以是时间复杂度 ...

  4. 7-20 判断两个字符串是否为变位词 (10 分)如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy

    7-20 判断两个字符串是否为变位词 (10 分) 如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词.比如,"heart"与"earth" ...

  5. 判断两个字符串是否互为变形词

    判断两个字符串是否互为变形词 [题目] 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词.请实现函数判断两个字符 ...

  6. Java判断两个字符串是否互为变形词

    判断两个字符串是否互为变形词 [题目] 给定两个字符串 str I 和 str2, 如果 strl 和 str2 中出现的字符种类一样且每种字符出现的次数也 一样,那么 str l 与 str2 互为 ...

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

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

  8. 判断两个字符串是否是变形词

    问题: 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词.请实现函数判断两个字符串是否互为变形词. 举例: s ...

  9. 字符串题目 1 --------判断两个字符串是否为旋转词

    题目描述 如果一个字符串为str,把字符串的前面任意部分挪到后面形成的字符串交str的旋转词.比如str="12345",str的旋转串有"12345".&qu ...

最新文章

  1. 天昊生物16S扩增子绝对定量测序项目文章再次登陆《Science of the Total Environment》...
  2. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
  3. 【数据平台】sklearn库特征工程之特征选择和降维
  4. urllib2 python3错误?用from urllib import request来代替!
  5. 追求极致速度,极简多模态预训练模型ViLT,推理速度比UNITER快60倍!(ICML2021)...
  6. Java设计模式之迭代子模式
  7. 修改 Windows Host 文件工具
  8. Xilinx Vivado 2017.2安装教程
  9. js正则验证手机号码和座机号码及邮箱
  10. 【食安云桥】python 文件内批量长度除以3.5替换
  11. Word2013出现未响应的解决方法
  12. 程序员教你不背单词学英语!流利英语一周成!!!
  13. CHD搭建的环境中,解决用户权限的问题
  14. lob 索引 oracle,oracle 12c lob索引
  15. 可能是最好的设计模式入门教程——里氏替换原则
  16. 流式数据、批式数据、实时数据、历史数据的区别
  17. 企业级开发平台的演进
  18. gradle - Gradle tool window
  19. No power supply specified for netVCC in Power Rail Confiquration.
  20. EVERYTHING本地搜索工具

热门文章

  1. 卡特兰数(高精度乘法压位)
  2. 职场秘笈:求人办事厚黑学.txt
  3. 卡卡西游2服务器无响应,卡卡西游2最新版
  4. 《魔鬼经济学》纪录片观后感
  5. 【MySQL】数据库 -- select详解
  6. 远程控制公司电脑真的很简单
  7. 操作系统 --死锁(十)
  8. c语言用枪射气球小游戏,小程序,敲键盘,射气球(图形界面,第一次用汉字)
  9. LeetCode 452 射气球问题
  10. Hadoop Yarn RPC远程命令执行