leetcode 763. 划分字母区间
题目描述:
字符串 S
由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
示例 1:
输入: S = "ababcbacadefegdehijhklij"
输出: [9,7,8]
解释:
划分结果为 "ababcbaca", "defegde", "hijhklij"。
每个字母最多出现在一个片段中。
像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
注意:
S
的长度在[1, 500]
之间。S
只包含小写字母'a'
到'z'
。
思路分析:
思路是双指针求解。由于题目限制了字符类型只有字母的大小写。首先利用一个hash表存储字符串中出现字符的最后出现位置。接下来从头开始遍历字符串,start指针指向开始位置,last指针指向对于当前字符来说可接收的最后的位置,在start+1和last之间进行遍历,若当前字符的最后出现位置大于last,则需要更新last。在start+1和last之间的循环结束后,当前的划分长度即为last-start+1。需要注意start为0的情况,如果当前的res数组中为空,则长度即为last-start,否则为last-start+1。
代码:
class Solution {
public:
vector<int> partitionLabels(string S) {
vector<int> res;
if(S.size()==)
return res;
int hash[] = {};
for(int i=; i<S.length();i++)
{
hash[S[i]] = i;
}
int last=;
int start = ;
for(int i=; i<S.length();)
{
start = last;
if(start>=S.length())
break;
last = hash[S[i]];
for(int j=start+; j<=last; j++)
{
if(hash[S[j]]<last)
continue;
last = hash[S[j]];
}
if(res.size()==)
res.push_back(last-start+);
else
res.push_back(last-start);
i = last+;
}
return res;
}
};
leetcode 763. 划分字母区间的更多相关文章
- Java实现 LeetCode 763 划分字母区间(暴力)
763. 划分字母区间 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示例 1: 输入: S = & ...
- LeetCode 763划分字母区间 详解
题目详情 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示例 1: 输入: S = "ab ...
- LeetCode:划分字母区间【763】
LeetCode:划分字母区间[763] 题目描述 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示 ...
- JS 之 每日一题 之 算法 ( 划分字母区间 )
题目详解: 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 例子: 示例 1: 输入:S = &quo ...
- [Swift]LeetCode763. 划分字母区间 | Partition Labels
A string S of lowercase letters is given. We want to partition this string into as many parts as pos ...
- 【LeetCode】数组--合并区间(56)
写在前面 老粉丝可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的[贪心算法]已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天介绍的是第二个专题[数组] 数组( ...
- 【LeetCode】763-划分字母区间
title: 763-划分字母区间 date: 2019-04-15 21:10:46 categories: LeetCode tags: 字符串 贪心思想 双指针 题目描述 字符串 S 由小写字母 ...
- [LeetCode] 763. Partition Labels 分割标签
A string S of lowercase letters is given. We want to partition this string into as many parts as pos ...
- [LeetCode] Summary Ranges 总结区间
Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...
随机推荐
- Zookeeper到底是什么
1. 什么是Zookeeper 用一句话对其进行定义就是:它是一套高吞吐的分布式协调系统.从中我们可以知道Zookeeper至少具有以下特点: 1.Zookeeper的主要作用是为分布式系统提供协调服 ...
- 第一个APP上架IOS审核相关的记录
以前一直没做过APP开发,第一版是用WAP版做的,采用了light7框架制作,没有UI设计. 升级到第二版之后,使用了HBUILDER的方式开发,https://dcloud.io/ 官方在这里. 目 ...
- NoSql的对比以及键值对的存储方式(为什么速度特别快)
什么是NoSql NoSQL(Not Only SQL),泛指非关系型的数据库,是对不同于传统的关系型数据库的数据库管理系统的统称,强调Key-Value Stores和文档数据库的优点.为了解决大规 ...
- Android中H5和Native交互的两种方式
Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...
- Java 之 JDK1.8之前日期时间类
一.JDK1.8之前日期时间类 二. java.lang.System类 System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1 ...
- 实验吧——你真的会PHP吗?(intval范围 php中\00的利用)
题目地址:http://ctf5.shiyanbar.com/web/PHP/index.php 抓包在header中发现提示 访问得到源码 <?php $info = "" ...
- android studio学习---Android studio 导入github工程
无论是那种方式,都最好是先把github上的工程项目下载到本地,然后修改文件再import 首先要知道 自己的build.gradle,在project下面的版本号是多少,比如我的: depende ...
- CDA数据分析【数据处理工具SPSS】
一.概述 SPSS[Statistical Package for the Social Science]社会科学统计软件包.SPSS统计软件在社会学.经济学.心理学.教育学等多个学科的研究工作和通信 ...
- Oracle 11.2.0.4打补丁
所需补丁及高版本opatch 上传后将p6880880_112000_Linux-x86-64.zip解压覆盖$ORACLE_HOME/OPatch目录即可 [oracle@localhost OPa ...
- Windows实时预览markdown
1.安装Notepad++ 2.打开Notepad++菜单栏的"插件(P)",然后打开"插件管理" 3.搜索"MarkdownViewer++&quo ...