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