zoukankan      html  css  js  c++  java
  • LeetCode_763. 划分字母区间

    LeetCode_763. 划分字母区间

    字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

    示例 1:
    
    输入:S = "ababcbacadefegdehijhklij"
    输出:[9,7,8]
    解释:
    划分结果为 "ababcbaca", "defegde", "hijhklij"。
    每个字母最多出现在一个片段中。
    像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
    
    

    提示:
    S的长度在[1, 500]之间。
    S只包含小写字母 'a' 到 'z' 。

    思路

    嗐,看了解析
    使用一次循环遍历把每一个字符出现的最晚位置存储下来。
    再使用一次遍历
    对于每个访问到的字母,可以得到这个字母最后出现的位置 end,那么该字母存在的分段的位置是肯定大于等于 end的。所以 end = max(end,last[S[i]-'a'])
    当访问到end 的时候,说明当前分段访问结束。
    然后使start = end + 1,继续寻找。

    code

    class Solution {
    public:
        vector<int> partitionLabels(string S) {
           int last[26];
           int length = S.size();
    
           //遍历一边字符串 找到每一个字符最晚出现的位置
           for(int i =0;i<length;i++)
           {
               last[S[i] - 'a'] = i;
           }
           
           vector<int> partition;
           int start = 0,end =0;
           for(int i = 0;i<length;i++)
           {
               end = max(end,last[S[i]-'a']);
               if(i ==end)
               {
                    partition.push_back(end-start+1);
                    start = end + 1;
               }
                
           }
           return partition;
    
        }   
    };
    

    链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/partition-labels

  • 相关阅读:
    python jinja2模板分页效果
    vscode配置svn
    解决VSCODE打开新文件覆盖上一个窗口的问题
    vue所用插件整理
    vue bus总线
    create-react-app使用less
    react入门
    ES6|Object
    vue轮播插件--vue-awesome-swiper
    js/jq中遍历对象或者数组的函数(foreach,map,each)
  • 原文地址:https://www.cnblogs.com/jiashun/p/LeetCode_763.html
Copyright © 2011-2022 走看看