Ai
1 Star 2 Fork 5

LilithSangreal/LeetCode-Solutions

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
minimum-window-subsequence.py 1.72 KB
一键复制 编辑 原始数据 按行查看 历史
kamyu 提交于 2019-06-03 12:25 +08:00 . Update minimum-window-subsequence.py
# Time: O(s * t)
# Space: O(s)
class Solution(object):
def minWindow(self, S, T):
"""
:type S: str
:type T: str
:rtype: str
"""
lookup = [[None for _ in xrange(26)] for _ in xrange(len(S)+1)]
find_char_next_pos = [None]*26
for i in reversed(xrange(len(S))):
find_char_next_pos[ord(S[i])-ord('a')] = i+1
lookup[i] = list(find_char_next_pos)
min_i, min_len = None, float("inf")
for i in xrange(len(S)):
if S[i] != T[0]:
continue
start = i
for c in T:
start = lookup[start][ord(c)-ord('a')]
if start == None:
break
else:
if start-i < min_len:
min_i, min_len = i, start-i
return S[min_i:min_i+min_len] if min_i is not None else ""
# Time: O(s * t)
# Space: O(s)
class Solution2(object):
def minWindow(self, S, T):
"""
:type S: str
:type T: str
:rtype: str
"""
dp = [[None for _ in xrange(len(S))] for _ in xrange(2)]
for j, c in enumerate(S):
if c == T[0]:
dp[0][j] = j
for i in xrange(1, len(T)):
prev = None
dp[i%2] = [None] * len(S)
for j, c in enumerate(S):
if prev is not None and c == T[i]:
dp[i%2][j] = prev
if dp[(i-1)%2][j] is not None:
prev = dp[(i-1)%2][j]
start, end = 0, len(S)
for j, i in enumerate(dp[(len(T)-1)%2]):
if i >= 0 and j-i < end-start:
start, end = i, j
return S[start:end+1] if end < len(S) else ""
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/LilithSangreal/LeetCode-Solutions.git
git@gitee.com:LilithSangreal/LeetCode-Solutions.git
LilithSangreal
LeetCode-Solutions
LeetCode-Solutions
master

搜索帮助