mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 07:06:42 +08:00
Merge pull request #1901 from ZerenZhang2022/patch-9
Update 0763.划分字母区间.md
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user