0%

LeetCode.串联所有单词的子串

给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

  • 示例 1:
    输入:s = “barfoothefoobarman”, words = [“foo”,”bar”]
    输出:[0,9]
  • 示例 2:
    输入: s = “wordgoodgoodgoodbestword”, words = [“word”,”good”,”best”,”word”]
    输出:[]

解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
object AllWordRelateStr {

def main(args: Array[String]): Unit = {
println(solution("abarfoocdfoobarfoofoofoobar", Array("bar", "foo")))
}

def solution(str: String, strs: Array[String]): List[Int] = {
if (str == null || str == "" || strs.length == 0) return List()
if (str.length < strs(0).length * strs.length) return List()

val l = strs(0).length
val res = ListBuffer[Int]()
for (i <- 0 until str.length - l * strs.length + 1) {
val list = strs.toBuffer
breakable(
for (k <- 0 until strs.length) {
val word = str.substring(i + k * l, i + (k + 1) * l)
if (list.contains(word)) {
list -= word
} else {
break()
}
}
)
if (list.isEmpty) {
res += i
}
}

res.toList
}

}