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

  

  如果一个字符串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. Linux下Bash入门学习笔记
  2. 8个你应该了解的正则表达式
  3. python3默认使用的编码是_python3里的中文编码是什么?
  4. 线段树-Pudding Monster CF526F-单调栈
  5. log4j mysql 异步_spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)...
  6. 浙大版python_浙大版《Python 程序设计》题目集1-5
  7. 用python画风车_用Python画小女孩放风筝的示例
  8. 如何使用Python玩转PDF各种骚操作?你看了就知道。
  9. 《CODE》读后笔记——第14~20章
  10. 模模搭古城搭建学习笔记2:基础设施篇
  11. windowns下VS缺少头文件“unistd.h“的解决方案
  12. 2020年中国电机驱动芯片行业产业链、市场规模、产量及发展趋势分析「图」
  13. 设备安全——入侵检测IDS
  14. c语言课程设计同学录管理系统,c语言课程设计 同学录
  15. 既要四摄拍照也要高颜值 荣耀9青春版体验评测
  16. 基于thinkphp+mysql+layerui+bootstrap的通讯录管理系统
  17. 物联网服务器通信协议选择,物联网都有哪些通信协议,该如何去选择
  18. 服务器系统945主板,IT教程:945主板最高装什么cpu
  19. 网上学什么副业赚钱?分享多个赚钱的副业,总有一个适合你
  20. springBoot实战视频收集

热门文章

  1. unity2D横版游戏教程7-敌人AI死亡效果
  2. 国际版QQ登陆协议的详细分析-工具准备
  3. Pandas set_index 用法
  4. 解决Jmeter在Mac下崩溃、闪退
  5. 最强干货 | 流量神器!!
  6. 龙芯胡伟武要当CEO
  7. 留几手被毙掉的互联网演讲稿
  8. coco2dx精灵和背景遮挡_Cocos2d-x精灵的性能优化——使用纹理图集和精灵帧缓存...
  9. OFD专用电子发票及PDF普通电子发票-批量解析V1.5.2
  10. 计算机音乐的音乐特征的是什么意思,音乐的特征有那些,请举例说明