

2021-02-12:如何判断两个字符串是否互为旋转字符串?
source link: https://studygolang.com/articles/33318
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

2021-02-12:如何判断两个字符串是否互为旋转字符串?
福大大架构师每日一题 · 1天之前 · 70 次点击 · 预计阅读时间 1 分钟 · 不到1分钟之前 开始浏览2021-02-12:如何判断两个字符串是否互为旋转字符串?
福哥答案2021-02-12:
假设字符串str1是“ABCDE”,字符串str2是“CDEAB”。字符串str2可以拆分成“CDE”和“AB”,可以拼成“ABCDE”。所以str1和str2互为旋转字符串。
解法:
1.判断str1和str2的字符串长度是否相等。不等返回false;相等进行下一步。
2.设str=str1+str1,判断str是否包含str2。如果包含,是旋转字符串。如果不包含,说明不是旋转字符串。
字符串是否包含子字符串,可以用相应语言的系统自带函数,也可以用kmp算法。
代码用golang编写,代码如下:
package main
import (
"fmt"
"strings"
)
func main() {
str1 := "ABCDE"
str2 := "CDEAB"
ret := rotateString1(str1, str2)
fmt.Println("1.系统自带函数:", ret)
ret = rotateString2(str1, str2)
fmt.Println("2.kmp算法:", ret)
}
//1.系统自带函数
func rotateString1(A string, B string) bool {
return len(A) == len(B) && strings.Contains(A+A, B)
}
//2.kmp算法
func rotateString2(A string, B string) bool {
return len(A) == len(B) && kmp(A+A, B) >= 0
}
func kmp(s string, m string) int {
sLen := len(s)
mLen := len(m)
if sLen < mLen {
return -1
}
if mLen == 0 {
return 0
}
next := getNextArray(m)
x := 0
y := 0
for x < sLen && y < mLen {
if s[x] == m[y] {
x++
y++
} else if y > 0 {
y = next[y]
} else {
x++
}
}
if y == mLen {
return x - y
} else {
return -1
}
}
func getNextArray(m string) []int {
mLen := len(m)
if mLen == 1 {
return []int{-1}
}
next := make([]int, mLen)
next[0] = -1
cn := 0
for i := 2; i < mLen; i++ {
if m[i-1] == m[cn] {
cn++
next[i] = cn
i++
} else if cn > 0 {
cn = next[cn]
} else {
i++
}
}
return next
}
执行结果如下:

有疑问加站长微信联系(非本文作者)

Recommend
-
82
-
48
二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别。 整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b" ] -gt 大于,如:if [ "$a" -gt "$b" ] -ge...
-
3
Google 面试题 | 判断字符串是否可由重复子字符串组成 题目描述对于一个非空字符串,判断其是否可由一个子字符串重复多次组成。字符串只包含小写字母且长度不超过10000。
-
6
golang判断字符串出现的位置及是否包含 次序 · 2018-10-30 07:34:40 · 25919 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览
-
6
利用js判断字符串中是否包含某个字符串的方法 2022-03-0909:47:23评论932字 JS检测一个字符串...
-
7
方法一(推荐使用): indexOf() indexOf() 方法:返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。 var str = "LiHeErNAN"; console.log(str.indexOf("A") != -1 ); // true ...
-
9
js 判断字符串中是否包含某个字符串五种方法 方法一: indexOf() (推荐) var str = "123"; console.log(str.indexOf("3") != -1 ); // true ...
-
8
在JavaScript中,判断两个对象是否相等有多种方法,取决于你对 相等 的定义以及对象属性的类型。以下是几种常见的方法:1. 严格相等运算符 (===)使用 === 运算符可以比较两个对象是否引用同一个对象。如果两个变量引用了同一个对象...
-
5
在编程中,判断两个对象是否相等是一项常见的任务,同时判断对象是否相等在很多情况下都非常重要,例如: 单元测试:编写单元测试时,经常需要验证函数的输出是否符合预期,这涉及到比较对象是否相等。 数据结构操作
-
11
Java中检查字符串是否互相旋转或镜像反射 当我们使用 Java 工作时,字符串操作和比较是...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK