React訓練營:GraphQL 與CRUD的故事
阿新 • • 發佈:2022-04-04
//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; } }