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

问题:

我的一位朋友今天在面试中询问了以下问题,了解软件开发人员的职位:
给定两个字符串s1s2如何查看s1旋转旋转版本?
 
如果s1 = "stackoverflow",则以下是其某些旋转版本:

"tackoverflows"
"ackoverflowst"
"overflowstack"

其中"stackoverflwo"旋转版本。
他给出的答案是:

s2并找到作为s1的子字符串的最长前缀,这将提供旋转点。一旦你找到了这一点,那么在这一点上打破s2获得s2as2b,然后只需检查是否concatenate(s2a,s2b) == s1

这对我和我的朋友来说似乎是一个很好的解决方案。但访问者却以为这样。他要求一个更简单的解决方案。请告诉我如何在Java/C/C++中执行此操作?
提前致谢。

回答:

首先确保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);
}

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Interview question: Check if one string is a rotation of other string

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 4 = 2