leetcode809. 情感丰富的文字

有时候人们会用重复写一些字母来表示额外的感受,比如 “hello” -> “heeellooo”, “hi” -> “hiii”。我们将相邻字母都相同的一串字符定义为相同字母组,例如:“h”, “eee”, “ll”, “ooo”。

对于一个给定的字符串 S ,如果另一个单词能够通过将一些字母组扩张从而使其和 S 相同,我们将这个单词定义为可扩张的(stretchy)。扩张操作定义如下:选择一个字母组(包含字母 c ),然后往其中添加相同的字母 c 使其长度达到 3 或以上。

例如,以 “hello” 为例,我们可以对字母组 “o” 扩张得到 “hellooo”,但是无法以同样的方法得到 “helloo” 因为字母组 “oo” 长度小于 3。此外,我们可以进行另一种扩张 “ll” -> “lllll” 以获得 “helllllooo”。如果 S = “helllllooo”,那么查询词 “hello” 是可扩张的,因为可以对它执行这两种扩张操作使得 query = “hello” -> “hellooo” -> “helllllooo” = S。

输入一组查询单词,输出其中可扩张的单词数量。

示例:

输入:
S = “heeellooo”
words = [“hello”, “hi”, “helo”]
输出:1
解释:
我们能通过扩张 “hello” 的 “e” 和 “o” 来得到 “heeellooo”。
我们不能通过扩张 “helo” 来得到 “heeellooo” 因为 “ll” 的长度小于 3 。

代码

class Solution {public int expressiveWords(String S, String[] words) {int n=S.length(),res=0;if (n==0) return 0;int[] jump=new int[n];//记录出现的多个连续重复字符的末尾位置jump[n-1]=n-1;for(int i=n-2;i>=0;i--){if(S.charAt(i)==S.charAt(i+1))jump[i]=jump[i+1];else jump[i]=i;}for(String string:words)//遍历words{int start=0,i=0;for(;i<string.length()&&start<n;i++)//遍历单词的每个字符{if(string.charAt(i)==S.charAt(start))//相同字符{int len=1;while (i+1<string.length()&&string.charAt(i)==string.charAt(i+1))//找出后面相同字符的长度{i++;len++;}int len2=jump[start]+1-start;//根据jump数组直接得出最后一个重复字符的位置if(len2<=2&&len2!=len||len>len2)
//当S中字符连续的长度小于2,不能任意匹配长度,必须和word连续的长度相同break;start=jump[start]+1;}else break;}if(i==string.length()&&start==n)  res++;}return res;}
}

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

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

相关文章

NeHe OpenGL教程 第三十课:碰撞检测

转自【翻译】NeHe OpenGL 教程 前言 声明&#xff0c;此 NeHe OpenGL教程系列文章由51博客yarin翻译&#xff08;2010-08-19&#xff09;&#xff0c;本博客为转载并稍加整理与修改。对NeHe的OpenGL管线教程的编写&#xff0c;以及yarn的翻译整理表示感谢。 NeHe OpenGL第三十课…

andorid手机电脑操作

之前一直使用androidscreencast在pc上对手机进行操作,好久都没用了,前些天再次用的时候,提演示样例如以下: 决定还是自己写一个吧,由于7月份要做一个小分享,打算讲一些android的东西,须要在电脑上显示手机这边的画面,提供一定的操作. 花了一点时间做好了,给大家截一个图,代码放…

struct.error: cannot convert argument to integer解决办法

更新Python包转载于:https://www.cnblogs.com/long5683/p/11086768.html

sphinx_Sphinx之谜:如何轻松地编写代码

sphinx为什么我在这里&#xff1f; (Why Am I Here?) You, the reader, are here because you wrote some awesome tool in Python, and you want to make it accessible and easy to use.读者之所以在这里&#xff0c;是因为您使用Python编写了一些很棒的工具&#xff0c;并且…

linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏

Linux环境下C语言实现贪吃蛇游戏[liultest snake]$ more snake.c#include #include #include #include #include #define NUM 60struct direct //用来表示方向的{int cx;int cy;};typedef struct node //链表的结点{int cx;int cy;struct node *back;struct node *next;}node;v…

Java正则表达式的使用和详解(上)

1.匹配验证-验证Email是否正确 public static void main(String[] args) {// 要验证的字符串String str "servicexsoftlab.net";// 邮箱验证规则String regEx "[a-zA-Z_]{1,}[0-9]{0,}(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";// 编译正则表达式P…

在组策略中使用脚本为域用户添加网络打印机

使用脚本为用户添加网络打印机 如果你想让培训部门的用户登录后就能添加网络打印机&#xff0c;就可以使用登录脚本来实现。其中DCServer是域控制&#xff0c;MarketPC1是市场部门的计算机&#xff0c;韩立辉用户是培训部门的用户。下面就验证使用组策略为培训部门的用户添加网…

leetcode257. 二叉树的所有路径(回溯算法)

给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 输入: 1 / 2 3 5 输出: [“1->2->5”, “1->3”] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3 代码 /*** Definition for a b…

英特尔神经计算棒_如何设置英特尔Movidius神经计算棒

英特尔神经计算棒by Rishal Hurbans由Rishal Hurbans 如何设置英特尔Movidius神经计算棒 (How to set up the Intel Movidius Neural Compute Stick) In 2017 I was approached by Intel to join their Innovator Programme. After a couple interviews I was inducted as an …

linux 脚本中的push,linux shell之pushd、popd和dirs的使用讲解

1 问题我们有时候需要保存多个路径&#xff0c;上下键切换不方便&#xff0c;用cd-只能到上个目录&#xff0c;我们可以用dirs和pushd和popd2 dirs、pushd、popddirs: 这个命令显示栈里面所有的路径&#xff0c;一定会包含当前路径,常用参数如下dirs -v 显示栈里面的所有路径和…

为什么我从 Git Flow 开发模式切换到了 Trunk Based 开发模式?

我已经使用 Git Flow 构建我的 Git 分支有几年了。但是&#xff0c;我遇到了 Git Flow 的一些问题&#xff0c;其中大部分来自长期存在的分支。解决这些问题的方案就是 Trunk Based Development。这是一个非常简单的技术&#xff0c;也是有效的持续交付的基础。在这篇文章中&am…

DedeCMS 提示信息! ----------dede_addonarticle

把数据保存到数据库附加表 dede_addonarticle 时出错&#xff0c;请把相关信息提交给DedeCms官方。Duplicate entry ’2532′ for key ‘PRIMARY’出现这种情况其实是你的主键是不可重复的&#xff0c;现在重复插入值为2532的主键了。可以去掉主键唯一&#xff0c;或是设成自增…

angular 模块构建_通过构建全栈应用程序学习Angular 6

angular 模块构建Angular 6 is out! The new features include better performance, new powerful CLI additions and a new way to inject services.Angular 6出来了&#xff01; 新功能包括更好的性能&#xff0c;新的功能强大的CLI附加功能以及注入服务的新方法。 This tut…

leetcode74. 搜索二维矩阵(二分查找)

编写一个高效的算法来判断 m x n 矩阵中&#xff0c;是否存在一个目标值。该矩阵具有如下特性&#xff1a; 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 示例 1: 输入: matrix [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] tar…

搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传

一、私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey 和 packagesPath apikey&#xff1a;推送包到nuget服务端 packpage: 上传上来的包存放的服务器位置 4.发布web项目到IIS中&#xff0c…

linux 网络配置 阮一峰,Vim 配置入门

Vim 是最重要的编辑器之一&#xff0c;主要有下面几个优点。可以不使用鼠标&#xff0c;完全用键盘操作。系统资源占用小&#xff0c;打开大文件毫无压力。键盘命令变成肌肉记忆以后&#xff0c;操作速度极快。服务器默认都安装 Vi 或 Vim。Vim 的配置不太容易&#xff0c;它有…

spring 之 property-placeholder 分析

不难知道&#xff0c; property-placeholder 的解析是 PropertyPlaceholderBeanDefinitionParser 完成的&#xff0c; 但是 它仅仅是个parser &#xff0c; 它仅仅是读取了 location 等配置属性&#xff0c; 并没有完成真正的解析&#xff0c;及 注册。 <context:property-p…

leetcode面试题 10.02. 变位词组

编写一种方法&#xff0c;对字符串数组进行排序&#xff0c;将所有变位词组合在一起。变位词是指字母相同&#xff0c;但排列不同的字符串。 注意&#xff1a;本题相对原题稍作修改 示例: 输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”], 输出: [ [“ate”,…

hacktoberfest_我第一次参加Hacktoberfest中学到了什么

hacktoberfestImposter syndrome is something we all struggle with to one degree or another. Imposter syndrome is the fear of exposure as a fraud. If you’re anything like me you have felt like your work was not good enough to show. Or you weren’t far along…

--save 和--save-dev的区别

npm install 在安装 npm 包时&#xff0c;有两种命令参数可以把它们的信息写入 package.json 文件&#xff0c;一个是npm install --save另一个是 npm install --save-dev&#xff0c;他们表面上的区别是--save 会把依赖包名称添加到 package.json 文件 dependencies 键下&…