[leetcode]重复的子字符串[javascript]

https://leetcode-cn.com/problems/repeated-substring-pattern/

描述

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:

输入: "abab"

输出: True

解释: 可由子字符串 "ab" 重复两次构成。

示例 2:

输入: "aba"

输出: False

示例 3:

输入: "abcabcabcabc"

输出: True

解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)

分析

直接循环找子串,再内部再次循环,如果遇到与字串不相同就跳出内部循环。如果没有跳出,说明找到了重复的子串。循环结束没有则直接返回false。使用了flag进行状态判断。

/**
 * @param {string} s
 * @return {boolean}
 */
var repeatedSubstringPattern = function(s) {
  let len = s.length, count = 0
  if (len <= 1) {
    return false
  }
  while (len >> 1 > count) {
    count++
    if (len % count !== 0) {
      continue
    }
    let sample = s.slice(0, count), flag = true // flag表示是否重复
    for (let i = 0;i < len / count; i++) {
      if (sample !== s.slice(i * count, (i + 1) * count)) {
        flag = false
        break
      }
    }
    if (flag) {
      return true
    } else {
      continue
    }
  }
  return false
};

leetcode的dalao的另一种解法

var repeatedSubstringPattern = function(s) {
  return (s + s).slice(1, -1).indexOf(s) >= 0
};

你可能感兴趣的:(leetcode)