Leetcode 每日一题——139. 单词拆分

it2025-07-14  2

139. 单词拆分

字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。 这道题目拿到手上,确实没什么思路,我开始想的是使用集合储存字符然后查找,最后发现没办法实现,只好参考了答案,答案也是用的hash表,但是官方答案的hash表中存储的是字符最后一次出现的索引,然后使用双指针贪心地查找所需区间。具体C++的实现如下:

class Solution { public: vector<int> partitionLabels(string S) { vector<int> result; if(!S.length()) return result; vector<int> chMap(26,0); for(int i=0;i<S.length();i++) { chMap[S[i]-'a']=i; } int start=0; int end=0; for(int i=0;i<S.length();i++) { int tmpend=chMap[S[i]-'a']; end=max(end,tmpend); if(i==end) { result.push_back(end-start+1); start=end+1; } } return result; } };

运行效果: 相同思路Python 的实现如下:

class Solution: def partitionLabels(self, S: str) -> List[int]: chMap=[0]*26 result=list() for i in range(len(S)): chMap[ord(S[i])-ord('a')]=i start,end=0,0 for i in range(len(S)): end=max(end,chMap[ord(S[i])-ord('a')]) if(end==i): result.append(end-start+1) start=end+1 return result

运行效果:

来源:力扣(LeetCode)链接

最新回复(0)