题目详情

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

示例 1:

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

注意:

  1. S的长度在[1, 500]之间。
  2. S只包含小写字母'a''z'

题目分析

此题关键的想法就是找到能分割的条件, 对S的每个字符进行判断, 看是否此字符是被分割到另一个字符中。

通过分析题目可以知道, 要求一个字符只能出现在一个字符串里, 这里可以知道第一个条件:

  • 当此字符在前面分割的出现,就不能当做分割点

但是这个条件显然是不够的,当出现前面分割的字符串没出现的字符时, 是不是能直接加进去呢? 这是不行的

考虑分割此字符串

aaaaabcdaefgh

当判断b的时候, 首先在前面已经分好的字符串aaaaa里面没有,符合条件。所以我们把b当做新的分割点。 单着显然是错误的,因为在b后面的字符串里,出现了a, 当我们以b作为分割点的话必定有两个分割的字符串,不符合条件。 所以第二个限制条件:

  • 分割点后面不能出现前面一个字符串中的字符

综上条件我们可以得到结果

AC代码

class Solution {
public:
vector<int> partitionLabels(string S) {
//分割点前的字符串的字符种类 (这里不用存一个完整的字符串,只需要存字符串出现的种类就可以)
string contain_char = "";
//前一个字符串的长度
int strLen = 0;
//返回的数组
vector<int> re; for (int i = 0; i < S.size(); i++) {
//当没有字符串被分割时
if(contain_char.size() == 0) {
contain_char += S[i];
strLen++;
continue;
} //如果当前字母在原来的字符串里 就加入进去
if (contain_char.find(S[i]) != string::npos) {
strLen++;
} else {
//如果上一个string的包含的字符 在此字母后的string出现
//则说明此字符不是分割的地方, 把此字符加入到string
//而且更新contain_char bool flag = false;
for (auto singleChar : contain_char) {
//后面有字符
if (S.find(singleChar, i+1) != string::npos) {
flag = true;
}
}
//如果后面有字符 就把当前字符加入到前面的字符串里
if (flag) {
contain_char += S[i];
strLen++;
} else {
contain_char = "";
contain_char += S[i];
re.push_back(strLen);
strLen = 1;
}
}
}
re.push_back(strLen); return re; }
};

总结

此题利用贪心算法是我对每一个S的字符, 在能把这个字符分离的情况下。 对每一个字符进行判断, 这样得到的字符串的数目应该是最多的

LeetCode 763划分字母区间 详解的更多相关文章

  1. Java实现 LeetCode 763 划分字母区间(暴力)

    763. 划分字母区间 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示例 1: 输入: S = & ...

  2. leetcode 763. 划分字母区间

    题目描述: 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示例 1: 输入: S = "a ...

  3. LeetCode:划分字母区间【763】

    LeetCode:划分字母区间[763] 题目描述 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示 ...

  4. Cisco思科模拟器交换机划分VLAN 入门详解 - 精简归纳

    Cisco思科模拟器交换机划分VLAN 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 24 转载请注明出处!️ 附: 交流方式: ️ ️ ️ QQ: 1846334075 We ...

  5. JS 之 每日一题 之 算法 ( 划分字母区间 )

    题目详解: 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 例子: 示例 1: 输入:S = &quo ...

  6. LeetCode 115.不同的子序列 详解

    题目详情 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如, ...

  7. java虚拟机内存区域的划分以及作用详解

    序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...

  8. [Swift]LeetCode763. 划分字母区间 | Partition Labels

    A string S of lowercase letters is given. We want to partition this string into as many parts as pos ...

  9. oracle中检索结果汉字首字母排序详解

    今天写需求,要求将结果按照成本中心首字母排序,平且空放在最前面. 进入正题: 1.使用oracle自带的函数: 按照首字母排序:nlssort(xxx,'NLS_SORT=SCHINESE_PINYI ...

随机推荐

  1. “git pull” 强制覆盖本地文件

    放弃本地修改,使用服务器代码覆盖本地的Git命令如下: $ git fetch --all $ git reset --hard origin/master $ git pull 使用master分支 ...

  2. GEDIT外部工具

    首先通过编辑-首选项-插件-外部命令来打开外部命令,然后在工具-Manage External Tools来添加新工具,工具代码使用bash语言. 代码使用方式:+添加新插件,在编辑框中粘贴代码,快捷 ...

  3. Sharding-Proxy的基本功能使用

    Sharding-Proxy是一个分布式数据库中间件,定位为透明化的数据库代理端.作为开发人员可以完全把它当成数据库,而它具体的分片规则在Sharding-Proxy中配置.它的整体架构图如下: 在架 ...

  4. [redis] -- 集群篇

    三种集群方式 主从同步:主从复制模式中包含一个主数据库实例(master)与一个或多个从数据库实例(slave) 优点: master能自动将数据同步到slave,可以进行读写分离,分担master的 ...

  5. Element 季度选择器+导入

    苦恼于element没有季度选择器,网上搜罗后整理实现,以便后期开发使用 同文件夹下新建一个vue界面,命名为Quarter.vue <template> <el-form> ...

  6. Python3网络爬虫开发实战PDF高清完整版免费下载|百度云盘

    百度云盘:Python3网络爬虫开发实战高清完整版免费下载 提取码:d03u 内容简介 本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib.req ...

  7. http安全

    https介绍  因为HTTP是明文传输,所以不安全,容易被黑客窃听或窜改: 通信安全必须同时具备机密性.完整性,身份认证和不可否认这四个特性 HTTPS的语法.语义仍然是HTTP,但把下层的协议由T ...

  8. 一年经验Java开发0713面试

    @ 目录 介绍一下你做的某些模块,有些什么比较复杂的地方? 你们的文件怎么存储的? 怎么没有用文件服务器? 文件存储有没有做备份? 在项目上有没有什么搞不定的问题? 对搞不定的问题你是怎么处理的? 你 ...

  9. MacOS下ElasticSearch学习(第二天)

    ElasticSearch第二天 学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"elasticsearch&q ...

  10. Python第一次实验

    ''' 计算 1.输入半径,输出面积和周长 2.输入面积,输出半径及周长 3.输入周长,输出半径及面积 ''' # # 1.输入半径,输出面积和周长 # from math import pi # # ...