- 题目:
给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。
注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。
- 示例:
示例 1:
输入:
s = "barfoothefoobarman",
words = ["foo","bar"]
输出:[0,9]
解释:
从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。
输出的顺序不重要, [9,0] 也是有效答案。
示例 2:
输入:
s = "wordgoodgoodgoodbestword",
words = ["word","good","best","word"]
输出:[]
- 我的解:
/**
* @param {string} s
* @param {string[]} words
* @return {number[]}
*/
var findSubstring = function(s, words) {
var out = []
let wordsL = words.length>0 ? words[0].length : 0
var reg=new RegExp('(.{'+wordsL+'})',"g");
for(var m=0;m<wordsL;m++){
var sArr = s.substr(m).replace(reg,'$1,').split(',')
for(var i=0;i<sArr.length;i++){
if(words.indexOf(sArr[i])>-1){
binarySearch(i, sArr, words, s) ? out.push(i * wordsL + m) : false
}
}
}
return out
};
var binarySearch = function(index, sArr, words, s) {
let length = words.length
let newArr = sArr.slice(index, index+length)
for(var i=0;i<words.length;i++){
if(newArr.indexOf(words[i])<0){
return false
}else{
newArr.splice(newArr.indexOf(words[i]),1)
}
}
return true
}
- 结果:
原题地址:https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words/