「字符串题」3. 旋转字符串 #includes实现

131 阅读1分钟

算法刷题系列,详解解题过程中遇到的知识点,解释过一遍的知识点不会重复解释。

题目

image.png

解题思路

通过让字符串重复一次 判断是否包含另一个字符串。

代码

/**
 * @param {string} s
 * @param {string} goal
 * @return {boolean}
 */
var rotateString = function(s, goal) {
    return  s.length === goal.length  && (s + s).includes(goal);
};

复杂度分析

空间复杂度 O(n)

一维数组空间,存储了 n 个元素。

时间复杂度 O(n^2)

比较一个字符串是否包含另一个字符串O(n^2)

要点详解

1. includes 使用

语法

str.includes(searchString[, position])

参数

  1. searchString 要在此字符串中搜索的字符串。
  2. 从当前字符串的哪个索引位置开始搜寻子字符串,默认值为 0

返回值

如果当前字符串包含被搜寻的字符串,就返回 true;否则返回 false

includes 的实现

v8源码

if (! String.prototype.includes) {
    Object.defineProperties(String.prototype, "includes", {
        value: function (searchString, position = 0) {
            if (typeof position !== 'number') {
                position = 0
            }
            if (position + searchString.length > this.length) {
                return false
            } else {
                return this.indexOf(searchString, position) !== -1
            }
        }
    })
}