1. 程式人生 > 其它 >React訓練營:GraphQL 與CRUD的故事

React訓練營:GraphQL 與CRUD的故事

//20220406
題目描述:字串 S 由小寫字母組成。我們要把這個字串劃分為儘可能多的片段,同一字母最多出現在一個片段中。返回一個表示每個字串片段的長度的列表。
題目連結:點我

解題思路:

  • 使用貪心策略,貪婪的策略在於儘早結束當前片段(不斷更新當前片段結束的座標)
  • 具體來說就是,使用end start兩個指標,以及flag陣列(用於記錄每個字母最後出現的位置),在遍歷的途中,不斷更新end的位置,如果遍歷index等於end,說明當前片段結束,開始下一片段的尋找
class Solution {
    public List<Integer> partitionLabels(String s) {
        int[] flag= new int[26];
        for(int i = 0;i<s.length();++i){
            flag[s.charAt(i)-'a'] = i;//記錄最後出現的位置
        }
        int start=0;int end = 0;
        List<Integer> res = new ArrayList<>();
        for(int i = 0;i<s.length();++i){
            end = Math.max(end,flag[s.charAt(i)-'a']);//獲取當前片段元素最終出現的位置
            if(i==end){//說明這一個片段已經結束了
                res.add(end-start+1);//加入片段長度
                start = i+1;
                end = i+1;
            }
        }
        return res;
    }
}