[Leetcode] 30. Substring with Concatenation of All Words โ
Problem โ
์ฃผ์ด์ง words
๋ฐฐ์ด์ด ์ฐ์์ ์ผ๋ก ์กด์ฌํ๋ s
๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๋ ๋ฌธ์
Solution โ
- s ๋ฌธ์์ด์ ๋ฐ๋ณต๋ฌธ์ํตํด ๊ฐ ์ธ๋ฑ์ค์ ๋ค์ ๋ฌธ์์ด์ ๋ฉ์๋์ ๋๊น
- ๋๊ธด ๋ฌธ์์ด์์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค์ ๋ฌธ์๊ฐ (๊ธธ์ด๊ฐ ๊ฐ์๊ฒ์์ด์ฉ) ๋ฐฐ์ด์ ์กด์ฌํ๋์ง ํ์ธ
- ์กด์ฌํ๋ค๋ฉด ๋ฌธ์์ด์์ ํด๋น ๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ฐฐ์ด์์๊ณ ์ ๊ฑฐ ํ ๋ฉ์๋๋ก ๋ค์๋๊น(์ฌ๊ทํจ์ ์ฌ์ฉ)
- ๋ฐฐ์ด์ ๊ฐ์ด ๋น์ด์๋ค๋ฉด ๋ชจ๋ ๊ฐ์ด ๊ฒ์ฌ๊ฐ๋๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ์ธ๋ฑ์ค๋ฅผ ์ ์ฅ
JS Code โ
js
/**
* @param {string} s
* @param {string[]} words
* @return {number[]}
*/
var findSubstring = function (s, words) {
let answer = []
const size = words[0].length
const totalSize = words.reduce((total, cur) => total + cur.length, 0)
const play = (str, words) => {
if (!words.length) return true
const word = str.substring(0, size)
const wordIdx = words.indexOf(word)
if (!!~wordIdx) {
words.splice(wordIdx, 1)
return play(str.substring(size), words)
}
return false
}
for (let i = 0; i <= s.length - totalSize; i++) {
if (play(s.substring(i), [...words])) answer.push(i)
}
return answer
}