小编典典

面试问题:检查一个字符串是否是另一个字符串的旋转

all

我的一个朋友今天在面试软件开发人员的职位时被问到以下问题:

给定两个字符串s1s2您将如何检查是否s1旋转 版本s2

例子:

如果s1 = "stackoverflow"那么以下是它的一些旋转版本:

"tackoverflows"
"ackoverflowst"
"overflowstack"

as"stackoverflwo"不是 旋转 版本。

他给出的答案是:

s2并找到最长的前缀,即 的子字符串s1,这将为您提供旋转点。一旦你找到那个点,s2在那个点打破以获得s2aand
s2b,然后检查是否concatenate(s2a,s2b) == s1

对我和我的朋友来说,这似乎是一个很好的解决方案。但面试官不这么认为。他要求一个更简单的解决方案。请告诉我你将如何做到这一点来帮助我Java/C/C++

提前致谢。


阅读 69

收藏
2022-06-01

共1个答案

小编典典

首先确保s1s2长度相同。然后检查是否s2是与 连接的子s1字符串s1

algorithm checkRotation(string s1, string s2) 
  if( len(s1) != len(s2))
    return false
  if( substring(s2,concat(s1,s1))
    return true
  return false
end

在 Java 中:

boolean isRotation(String s1,String s2) {
    return (s1.length() == s2.length()) && ((s1+s1).indexOf(s2) != -1);
}
2022-06-01