力扣(LeetCode)809. 情感丰富的文字(C++)

news2025/8/3 23:47:10

模拟

分析单词可扩张条件 :
对于某个字母,设目标字母长度 c 1 c1 c1 ,待扩张字母长度 c 2 c2 c2
c 1 < c 2 c1<c2 c1<c2,目标字母比待扩张字母少,false
c 1 ≥ c 2 c1\ge c2 c1c2,目标字母比待扩张字母多或者相等,如果 c 1 ≥ 3 c1\ge3 c13 可以扩张。如果 c 1 < 3 c1<3 c1<3 ,仅当 c 2 = c 1 c2=c1 c2=c1 ,字母数量相等,等价于“可扩张”。

算法流程:

  1. s s s 判空,若空,统计 w o r d s words words 里的空串
  2. 统计 s s s 中的字母组,依次存相邻字母和出现次数,保存在数组 p p p
  3. 遍历 w o r d s words words 中每个 w o r d word word ,如果 p p p 先被遍历完,说明 w o r d word word s s s 长,不可扩张,break。如果当前字母不同,break。遍历 w o r d word word 当前字母长度 c 2 c2 c2 ,比较 c 1 c1 c1 c 2 c2 c2
  4. 仅当 w o r d word word p p p 同时遍历完,可扩张。
class Solution {
public:
    int expressiveWords(string s, vector<string>& words) {
        int ans = 0;
        if(s.empty()){
            for(auto &w:words) 
                if(w.empty()) ans++;
            return ans;
        }
        vector<pair<char,int>> p;
        for(int i = 0;i<s.size();i++){
            int j = i + 1;
            while(j<s.size()&&s[i]==s[j]) j++;
            p.push_back({s[i],j-i});
            i = j-1;
        }
        for(auto &w:words){
            int k = 0;//k指向p
            for(int i = 0 ;i<w.size();i++){//i指向w
                if(p.size()==k) {//p遍历完,w还没遍历完
                    k= -1;
                    break;
                }
                if(w[i]!=p[k].first) break;
                int j = i + 1;
                while(j<w.size()&&w[i]==w[j]) j++;
                int c1 = p[k].second, c2 = j - i;
                if(c1<c2) break;
                if(c1<3&&c1!=c2) break;
                k++,i = j - 1;
            }
            if(p.size()==k) ans++;//w和p同时遍历完
        }
        return ans;
    }
};

时间复杂度 O ( m + ∑ i = 0 n − 1 w o r d s i ) O(m +\sum_{i=0}^{n-1}words_i) O(m+i=0n1wordsi) n n n 是单词数量, m m m 是待扩张字符串的长度。遍历每个单词的时间复杂度 O ( ∑ i = 0 n − 1 w o r d s i ) O(\sum_{i=0}^{n-1}words_i) O(i=0n1wordsi) ,遍历 s s s 的时间复杂度 O ( m ) O(m) O(m) ,总时间复杂度 O ( m + ∑ i = 0 n − 1 w o r d s i ) O(m +\sum_{i=0}^{n-1}words_i) O(m+i=0n1wordsi)

空间复杂度 O ( m ) O(m) O(m) ,保存 s s s 的字母组的最坏空间复杂度 O ( m ) O(m) O(m)

致语

理解思路很重要。
欢迎读者在评论区留言,答主看到就会回复的。

AC

AC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据开发——Hive实战案例

文章目录1. 创建表结构1.1 视频表结构1.2 用户表结构2. 准备工作2.1 创建临时表2.2 创建最终使用表2.3 对创建表进行解读3. 业务分析1. 创建表结构 1.1 视频表结构 1.2 用户表结构 2. 准备工作 2.1 创建临时表 由于使用的是orc方式进行存储&#xff0c;所以我们需要建立一个…

OpenFlow协议原理及基本配置-网络测试仪实操

一、OpenFlow协议原理 1.OpenFlow技术背景 ●转发和控制分离是SDN网络的本质特点之一。在SDN网络架构中&#xff0c;控制平面与转发平面分离&#xff0c;网络的管理和状态在逻辑上集中到一起&#xff0c;底层的网络基础从应用中独立出来&#xff0c;由此&#xff0c;网络获得…

不知道照片上怎么文字翻译成英文?来看看这篇文章

不知道你们在遇到看不懂的英文图片时&#xff0c;是不是和以前的我一样&#xff0c;一个一个的把图片内容输到翻译软件里&#xff0c;然后再进行翻译&#xff0c;其实这种办法不仅费时还费力&#xff0c;而且一旦遇到其它的外文就彻底没辙了&#xff0c;那怎么办呢&#xff1f;…

[附源码]java毕业设计音乐交流平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

我做数画ai绘画教程日赚过千,良心分享给想兼职赚钱的人

ai绘画能实现日赚过千&#xff0c;你信吗&#xff1f; 现在什么是风口&#xff1f;当然是ai绘画。而AI绘画里&#xff0c;什么最受欢迎&#xff0c;不用说&#xff0c;自然是二次元。 然后&#xff0c;很多人一拥而上&#xff0c;都去拍自己的二次元照片&#xff0c;然后在各…

10000m3d城镇生活污水处理工艺设计

目 录 1前 言 1 1.1 设计任务 2 1.2 设计目的 2 1.3 设计要求 2 1.4设计的数据以及资料 2 1.5 处理程度的计算 3 2 总体设计 5 2.1工艺比较的选择 5 2.2设计流量 8 2.2.1 设计规模 8 2.2.2 设计最大流量 8 2.3 格栅的设计计算 8 2.3.1格栅的作用及种类 8 2.3.2格栅的设计原则 8…

Linux系统编程(一)——环境搭建

准备写系统的总结Linux系统的一些知识以及Linux系统编程。这一篇先讲Linux搭建常用的开发环境。 目录 0x01 Linux开发环境搭建 一、远程链接操作 0x02 GCC 一、安装 二、了解GCC 0x03 静态库的制作及使用 一、库的介绍 二、静态库 0x04 动态库的制作和使用 一、配置…

Python遥感开发之批量掩膜和裁剪

Python遥感开发之批量掩膜和裁剪1.使用arcpy进行批量掩膜1.1 批量掩膜代码1.2 单个掩膜代码2.使用GDAL进行批量掩膜3.使用rasterio进行批量裁剪前言&#xff1a;主要介绍了使用arcpy、gdal、rasterio对遥感影像进行批量掩膜和裁剪。 1.使用arcpy进行批量掩膜 注意&#xff1a;…

Spring Boot——日志文件

文章目录1.日志的作用2.日志的用法3.自定义日志打印日志格式的说明4.日志级别5.在配置文件中设置日志级别5.1设置全局的日志级别和局部文件夹的日志级别6. 日志持久化7. 更简单的日志输出-lombok1.日志的作用 日志的作用&#xff1a;用来排除和定位问题 通过日志还可以具有以…

Greenplum数据库故障排查及修复

场景一&#xff1a;gp服务正常&#xff0c;存在部分segment实例丢失 1、异常现象 主节点切换gpadmin用户输入gpstate查看状态 如果红色框内有指向左边的箭头则说明存在部分segment实例丢失。 2、排查思路 首先查看主节点日志&#xff0c;重点关注发生segment丢失那段时间的…

【ML特征工程】第 3 章 :文本数据:扁平化、过滤和分块

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

关于SD-WAN的十问十答(最强攻略戳这里)

1. WAN和SD-WAN之间的区别&#xff1f; 从底层来看&#xff0c;相较基于硬件物理设施的WAN&#xff0c;SD-WAN是一种覆盖现有网络的软件技术&#xff0c;是部署在物理基础设施下层的流量管理网络。 和常规WAN相比&#xff0c;SD-WAN具有虚拟WAN体系结构和软件驱动技术&#xff…

[附源码]java毕业设计圆梦山区贫困学生助学系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

EasyRecovery适用于Windows和Mac的专业硬盘恢复软件

电脑中的数据文件对很多的小伙伴来说都是非常重要的&#xff0c;在下载安装新的软件设备时都需要非常谨慎&#xff0c;一旦碰到一些问题就可能会导致文件丢失&#xff0c;想要恢复这些文件并不是很容易&#xff0c;需要使用专业的数据恢复工具才可以对其进行恢复&#xff0c;那…

考研数据结构填空题整合_做题版

考研数据结构填空题整合 目录考研数据结构填空题整合一、ZYL组ZYL组一ZYL组二ZYL组三ZYL组四ZYL组五ZYL组六ZYL组七ZYL组八二、TJP组TJP组一TJP组二TJP组三三、LZH组LZH 组一LZH 组二LZH 组三LZH 组四LZH 组五LZH 组六LZH 组七四、LB组LB组一LB组二LB组三LB组四LB组五LB组六LB组…

2022年戈登·贝尔奖授予等离子体加速器突破研究

ACM 总裁Cherri Pancake&#xff08;图片来源&#xff1a;网络&#xff09; 11月17日&#xff0c;在达拉斯举行的SC22颁奖典礼上&#xff0c;ACM将2022年戈登贝尔奖&#xff08;Gordon Bell Prize&#xff09;授予了一组研究人员&#xff0c;他们利用四台超级计算机&#xff08…

kill-9 用时一时爽,悔恨火葬场!!!

目录 前言 kill -9 和kill -15的区别 常见的信号值有&#xff1a; 信号值9和15的区别&#xff1a; 总结 前言 相信很多程序员对于Linux系统都不陌生&#xff0c;即使自己的日常开发机器不是Linux&#xff0c;那么线上服务器也大部分都是的&#xff0c;所以&#xff0c;掌…

Android App开发音量调节中实现拖动条和滑动条和音频管理器AudioManager讲解及实战(超详细 附源码和演示视频)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、拖动条和滑动条 拖动条SeekBar继承自进度条ProgressBar&#xff0c;它与进度条的不同之处在于&#xff0c;进度条只能在代码中修改进度值&#xff0c;不能由用户改变进度值&#xff0c;拖动条不仅可以在代码中修改进度值&#xf…

ONE 2.0应用场景解读 | 如何通过时序拓扑直观还原故障传导链路?

近年来&#xff0c;随着数字化转型的不断推进&#xff0c;电子商务发展迅速&#xff0c;推动人们的购物行为随之发生转变&#xff0c;在线购物已成为人们的主要购物方式之一。相关数据表明&#xff0c;超过九成的中国网民使用过在线购物平台。 面对庞大的在线用户流量&#xf…

KMP算法——通俗易懂讲好KMP算法:实例图解分析+详细代码注解 --》你的所有疑惑在本文都能得到解答

1.kmp算法基本介绍 KMP 是一个解决模式串在文本串是否出现过&#xff0c;如果出现过&#xff0c;最早出现的位置的经典算法。Knuth-Morris-Pratt 字符串查找算法&#xff0c;简称为 “KMP 算法”&#xff0c;常用于在一个文本串 S 内查找一个模式串 P 的出现位置&#xff0c;这…