0%

Leetcode763 Partition Labels

Leetcode763 Partition Labels

题目描述

A string S of lowercase letters is given. We want to partition this string into as many parts as possible so that each letter appears in at most one part, and return a list of integers representing the size of these parts.

Example 1:

1
2
3
4
5
6
Input: S = "ababcbacadefegdehijhklij"
Output: [9,7,8]
Explanation:
The partition is "ababcbaca", "defegde", "hijhklij".
This is a partition so that each letter appears in at most one part.
A partition like "ababcbacadefegde", "hijhklij" is incorrect, because it splits S into less parts.

思路

将每一个字符与其对应的位置放入HashMap中,两个指针,start和end,end取end本身和所处理字符的位置中较大的那个值。如果i==end,则说明该字符串截取完毕,end-start+1为当前字符串得分长度并放入ans(list)中,直到最后一个字符循环结束。

image-20200517211029939

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public List<Integer> partitionLabels(String S) {
HashMap<Character, Integer> map = new HashMap<>();
for(int i=0;i<S.length();i++){
map.put(S.charAt(i),i);
}
List<Integer> ans = new ArrayList<>();
int start = 0;
int end = 0;
for(int i=0;i<S.length();i++){
end = Math.max(end,map.get(S.charAt(i)));
if(i == end){
ans.add(end - start + 1);
start = end +1;
}
}
return ans;
}
}

Note:

  1. S will have length in range [1, 500].
  2. S will consist of lowercase letters ('a' to 'z') only.
-------------本文结束感谢您的阅读-------------

Welcome to my other publishing channels