一尘不染

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

java

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

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

例:

如果是,s1 = "stackoverflow"那么以下是其一些轮换版本:

"tackoverflows"
"ackoverflowst"
"overflowstack"

其中,作为"stackoverflwo" 旋转的版本。

他给出的答案是:

s2,发现为子串最长前缀s1,这将使你的旋转点。找到该点后,s2在该点断开以获取s2as2b,然后检查是否concatenate(s2a,s2b) == s1

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

提前致谢。


阅读 195

收藏
2020-09-08

共1个答案

一尘不染

首先确保s1s2的长度相同。然后检查是否s2是一个s1s1以下内容串联的子字符串:

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);
}
2020-09-08