给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。
例如,s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。
今天做笔记题遇到类似上面的一题,之后网上搜了下其实是leetcode上的,看来面试是要刷下leetcode,不然现场想太仓促。
以AABCD为例,一次完整的循环移位分别是:
AABCD
ABCDA
BCDAA
CDAAB
DAABC
把每一次移位的后的字符串拼接起来,然后判断s2是否在中即可,下面用PHP代码实现一遍:
function stringContainsCheck($s1, $s2)
{
$arr = str_split($s1, 1);
$len = count($arr);
$s = $s1;
for ($i=1; $i<$len; $i++) {
$left = array_shift($arr);
array_push($arr, $left);//或$arr1[] = $left;
$s .= implode('', $arr);
}
return strpos($s, $s2) === false ? false : true;
}
var_dump(stringContainsCheck('AABCD', 'CDAA'));