36 lines
832 B
Kotlin
36 lines
832 B
Kotlin
|
class Solution {
|
||
|
fun minWindow(s: String, t: String): String {
|
||
|
val freqs = IntArray(128) { 0 }
|
||
|
t.forEach {
|
||
|
freqs[it.toInt()]++
|
||
|
}
|
||
|
|
||
|
var (bestLower, bestUpper) = 0 to -1
|
||
|
var count = t.length
|
||
|
var (l, r) = 0 to 0
|
||
|
|
||
|
while (r < s.length) {
|
||
|
if (freqs[s[r].toInt()]-- > 0) {
|
||
|
count--
|
||
|
}
|
||
|
|
||
|
while (count == 0) {
|
||
|
if (bestLower >= bestUpper || bestUpper - bestLower + 1 > r - l + 1) {
|
||
|
bestLower = l
|
||
|
bestUpper = r
|
||
|
}
|
||
|
|
||
|
freqs[s[l].toInt()]++
|
||
|
|
||
|
if (freqs[s[l++].toInt()] > 0) {
|
||
|
count++
|
||
|
}
|
||
|
}
|
||
|
|
||
|
r++
|
||
|
}
|
||
|
|
||
|
return s.substring(bestLower, bestUpper + 1)
|
||
|
}
|
||
|
}
|