当前位置: 首页 > news >正文

【算法与数据结构】763、LeetCode划分字母区间

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:本题要求为:

  • 1.尽可能多的划分片段
  • 2.字母只能出现在一个片段中
  • 3.片段连接起来仍然是s(只做切割,不改变字母位置)

在这里插入图片描述
  程序当中我们需要统计字母最后出现的位置,然后找到字符出现的最远边界,当i=最远边界时(从上图可以看出最远边界就是分割点),则找到了分割点。
  程序如下

class Solution {
public:vector<int> partitionLabels(string s) {// 1.尽可能多的划分片段 2.字母只能出现在一个片段中 3.片段连接起来仍然是s(只做切割,不改变字母位置)vector<int> result;int left = 0;			// 片段的左边界int right = 0;			// 片段的右边界int hash[27] = { 0 };	// 构建字母哈希表for (int i = 0; i < s.size(); i++) {hash[s[i] - 'a'] = i;	// 统计字母最后出现的位置}		for (int i = 0; i < s.size(); i++) {right = max(right, hash[s[i] - 'a']); // 找到字符出现的最远边界if (i == right) {	// 如果i=最远边界,则找到分割点result.push_back(right - left + 1);left = i + 1;}}return result;}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

三、完整代码

# include <iostream>
# include <vector>
# include <algorithm>
# include <string>
using namespace std;class Solution {
public:vector<int> partitionLabels(string s) {// 1.尽可能多的划分片段 2.字母只能出现在一个片段中 3.片段连接起来仍然是s(只做切割,不改变字母位置)vector<int> result;int left = 0;			// 片段的左边界int right = 0;			// 片段的右边界int hash[27] = { 0 };	// 构建字母哈希表for (int i = 0; i < s.size(); i++) {hash[s[i] - 'a'] = i;	// 统计字母最后出现的位置}		for (int i = 0; i < s.size(); i++) {right = max(right, hash[s[i] - 'a']); // 找到字符出现的最远边界if (i == right) {	// 如果i=最远边界,则找到分割点result.push_back(right - left + 1);left = i + 1;}}return result;}
};int main() {string s = "ababcbacadefegdehijhklij";Solution s1;vector<int> result = s1.partitionLabels(s);for (vector<int>::iterator it = result.begin(); it < result.end(); it++) {cout << *it << ' ';}cout << endl;system("pause");return 0;
}

end

http://www.lryc.cn/news/272435.html

相关文章:

  • 新火种AI|人形机器人敲响上市罗,首日市值高达390亿港元
  • SpringMVC框架
  • FreeRTOS——计数型信号量知识总结及实战
  • Linux下Docker Engine安装后的一些配置步骤
  • 【并发设计模式】聊聊Balking是如何实现以及具体原理
  • dubbo的一些问题思考
  • 盛最多水的容器(力扣11题)
  • .babky勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • 20240103-通过布局让自己的生活有有意义人生有价值
  • JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性
  • 八股文打卡day11——计算机网络(11)
  • 在Android设备上设置和使用隧道代理HTTP
  • Paddle3D 2 雷达点云CenterPoint模型训练
  • RabbitMQ集群的简单说明
  • 支付宝沙箱支付-验签出错之编码集异常
  • 图像分割-漫水填充法 floodFill (C#)
  • 在pycharm中jupyter连接上了以后显示无此库,但是确实已经安装好了某个库,使用python可以跑,但是使用ipython就跑不了
  • C++多态性——(3)动态联编的实现——虚函数
  • docker部署mysql
  • python代码大全(持续更新)
  • C#学习笔记 - C#基础知识 - C#从入门到放弃 - C# 处理程序异常相关技术
  • [python]项目怎么使用第三方库
  • java每日一题——双色球系统(答案及编程思路)
  • java的mybatis
  • Linux驱动开发简易流程
  • 基于springboot的靓车汽车销售网站
  • 爬取涛声网音频
  • 如何快速且有效的学习自动化测试?
  • openmmlab大模型实战营01
  • HarmonyOS-ArkTS基本语法及声明式UI描述