我的一个朋友今天在面试软件开发人员的职位时被问到以下问题:
给定两个字符串s1,s2您将如何检查是否s1是 旋转 版本s2?
s1
s2
例子:
如果s1 = "stackoverflow"那么以下是它的一些旋转版本:
s1 = "stackoverflow"
"tackoverflows" "ackoverflowst" "overflowstack"
as"stackoverflwo"不是 旋转 版本。
"stackoverflwo"
他给出的答案是:
取s2并找到最长的前缀,即 的子字符串s1,这将为您提供旋转点。一旦你找到那个点,s2在那个点打破以获得s2aand s2b,然后检查是否concatenate(s2a,s2b) == s1
s2a
s2b
concatenate(s2a,s2b) == s1
对我和我的朋友来说,这似乎是一个很好的解决方案。但面试官不这么认为。他要求一个更简单的解决方案。请告诉我你将如何做到这一点来帮助我Java/C/C++?
Java/C/C++
提前致谢。
首先确保s1和s2长度相同。然后检查是否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); }