java算法題解Leetcode763劃分字母區(qū)間示例
題目
字符串 S 由小寫字母組成。我們要把這個字符串劃分為盡可能多的片段,同一字母最多出現(xiàn)在一個片段中。返回一個表示每個字符串片段的長度的列表。
示例: 輸入:S = "ababcbacadefegdehijhklij" 輸出:[9,7,8] 解釋: 劃分結(jié)果為 "ababcbaca", "defegde", "hijhklij"。 每個字母最多出現(xiàn)在一個片段中。 像 "ababcbacadefegde", "hijhklij" 的劃分是錯誤的,因為劃分的片段數(shù)較少。
提示: S的長度在[1, 500]之間。 S只包含小寫字母 'a' 到 'z' 。
解題思路
1)解決問題的根本在于,找到一個區(qū)間,這個區(qū)間內(nèi)的字符,沒有在其他區(qū)間出現(xiàn)過
2)那我們就想找到這個區(qū)間的開始位置、結(jié)束位置,針對這個區(qū)間的每個字符,如果字符出現(xiàn)的lastIndex大于當前統(tǒng)計到的stop,則stop更新為此邊界,直到遍歷到這個stop邊界,證明此次遍歷,start->stop這個區(qū)間內(nèi),已經(jīng)包含所有重復字符

import java.util.ArrayList;
import java.util.List;
class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> res = new ArrayList<Integer>();
if (s == null || s.length() == 0) {
return res;
}
int start = 0, stop = 0;
for (int i = start; i < s.length(); i++) {
if (s.lastIndexOf(s.charAt(i)) > stop) {
stop = s.lastIndexOf(s.charAt(i));
}
if (i == stop) {
res.add(stop - start + 1);
start = i + 1;
}
}
return res;
}
}以上就是java算法題解Leetcode763劃分字母區(qū)間示例的詳細內(nèi)容,更多關(guān)于java算法劃分字母區(qū)間的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實現(xiàn)根據(jù)sql動態(tài)查詢并下載數(shù)據(jù)到excel
這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)根據(jù)sql動態(tài)查詢并下載數(shù)據(jù)到excel的功能,文中的示例代碼講解詳細,有需要的可以參考下2024-04-04

