面试题:检查一个字符串是否是另一个字符串的旋转 [已关闭]

2022-08-31 05:45:08

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

给定两个字符串,您将如何检查是否是的旋转版本?s1s2s1s2

例:

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

"tackoverflows"
"ackoverflowst"
"overflowstack"

其中 as 不是旋转版本。"stackoverflwo"

他给出的答案是:

获取并找到最长的前缀,该前缀是 的子字符串,它将为您提供旋转点。一旦你找到那个点,在那个点上休息得到和,然后只要检查是否s2s1s2s2as2bconcatenate(s2a,s2b) == s1

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

提前致谢。


答案 1

首先确保 和 的长度相同。然后检查是否是与 以下项串联的子字符串:s1s2s2s1s1

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

在爪哇:

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

答案 2

当然,更好的答案是,“好吧,我会问stackoverflow社区,可能会在5分钟内至少有4个非常好的答案”。大脑是好的,但我会把更高的价值放在一个知道如何与他人合作以获得解决方案的人身上。


推荐