Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
- 给定两个字符串,
s和goal。如果在若干次旋转操作之后,s能变成goal,那么返回true。 s的 旋转操作 就是将s最左边的字符移动到最右边。- 例如, 若
s = 'abcde',在旋转一次之后结果就是'bcdea'。
- 例如, 若
- 示例 1:
- 输入: s = "abcde", goal = "cdeab"
- 输出: true
- 示例 2:
- 输入: s = "abcde", goal = "abced"
- 输出: false
- 提示
1 <= s.length, goal.length <= 100s和goal由小写英文字母组成
二、思路分析:
- 根据题目来看其实就是字符串截取,然后拼接,看是不是和
target相等 - 字符串截取可以用字符串的
charAt方法,但是这个方法不会改变原来的字符串,只是复制一份出来,这里并不适用 - 所以这里的做法是先将字符串转化成数组,利用数组的
splice方法会改变原数组的方式来做 - 遍历整个数组,每次截取数组的第一项,然后把截取到的字符串添加到数组的最后一项
- 再利用数组的
join方法将数组的每一项拼接起来- 如果拼接后的字符串等于
goal,则返回true - 如果遍历完整个数组也没有得到相等的,则返回
false
- 如果拼接后的字符串等于
- 这里只遍历数组长度的次数就可以了,因为后面的遍历得到的结果会和前面的结果重复
三、AC 代码:
function rotateString(s: string, goal: string): boolean {
let sArr = s.split('');
for(let i = 0; i < s.length; i++){
let splitStr = sArr.splice(0, 1);
sArr.push(splitStr[0])
if(sArr.join('') === goal) return true
}
return false
};
四、总结:
- 题目难度简单,还有更多其他方法解题
- 更多解题方式,移步题解区