From 2fc3e83bcf7c053420a5ebb485608c0ccce17ced Mon Sep 17 00:00:00 2001 From: ZerenZhang2022 <118794589+ZerenZhang2022@users.noreply.github.com> Date: Sat, 18 Feb 2023 17:27:51 -0500 Subject: [PATCH] =?UTF-8?q?Update=200763.=E5=88=92=E5=88=86=E5=AD=97?= =?UTF-8?q?=E6=AF=8D=E5=8C=BA=E9=97=B4.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit python 解法三:区间合并法 (结合下一题 56. Merge Intervals 的写法) --- problems/0763.划分字母区间.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/problems/0763.划分字母区间.md b/problems/0763.划分字母区间.md index 6c4f1c5e..6667e740 100644 --- a/problems/0763.划分字母区间.md +++ b/problems/0763.划分字母区间.md @@ -276,6 +276,33 @@ class Solution: # 最右侧区间(字符串长度为1时的特殊情况也包含于其中) res.append(right - left + 1) return res + +# 解法三:区间合并法 (结合下一题 56. Merge Intervals 的写法) +class Solution: # + def partitionLabels(self, s: str) -> List[int]: + aaa = list(set(s)) + #aaa.sort() + bbb = list(s) + ccc = [] + for i in reversed(bbb): + ccc.append(i) + intervals = [] + for i in range(len(aaa)): + intervals.append([bbb.index(aaa[i]),len(bbb)-ccc.index(aaa[i])-1]) + # 先求出各个字母的存在区间,之后利用区间合并方法得出所有不相邻的最大区间。 + intervals.sort(key = lambda x:x[0]) + newinterval = [] + left, right = intervals[0][0], intervals[0][1] + for i in range(1,len(intervals)): + if intervals[i][0] in range(left, right+1): + right = max(intervals[i][1],intervals[i-1][1],right) + left = min(intervals[i-1][0],left) + else: + newinterval.append(right-left+1) + left = intervals[i][0] + right = intervals[i][1] + newinterval.append(right-left+1) + return newinterval ``` ### Go