旋转字符串

147 阅读2分钟

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 <= 100
    • s 和 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
};

四、总结:

  • 题目难度简单,还有更多其他方法解题
  • 更多解题方式,移步题解区

image.png