日拱算法:什么是“情感丰富的文字”?

简介: 本篇带来算法题:“情感丰富的文字”

image.png

本篇带来算法题:“情感丰富的文字”


  • 什么是“情感丰富的文字”?


有时候人们会用重复写一些字母来表示额外的感受,比如 "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 。


提示:

  • 0 <= len(S) <= 100。
  • 0 <= len(words) <= 100。
  • 0 <= len(words[i]) <= 100。
  • S 和所有在 words 中的单词都只由小写字母组成。


JavaScript 实现:


采用双指针的解法思路:


var expressiveWords = function (s, words) {
    let ans = 0;
    for (const w of words) if (check(s, w)) ans++;
    return ans;
};
function check(s1, s2) {
    let i = s1.length - 1, j = s2.length - 1;
    while (i >= 0 && j >= 0) {
        // 字符不相同 不符合要求
        if (s1[i] !== s2[j]) return false;
        // 算出s1[i]的重复字符数
        let k = i, cnt1 = 0;
        while (s1[i] === s1[k]) i--, cnt1++;
        // 算出s2[j]的重复字符数
        let h = j, cnt2 = 0;
        while (s2[j] === s2[h]) j--, cnt2++;
        // s2[j]的重复字符数大于s1[i]的重复字符数 不符合要求
        if (cnt2 > cnt1) return false;
        // s1[i]的重复字符数为2且s2[j]的重复字符数为1 不能扩展到3
        if (cnt1 === 2 && cnt2 === 1) return false;
    }
    return i === j;
}


相关文章
|
10月前
|
机器学习/深度学习 算法
【MATLAB第34期】 MATLAB 2023年棕熊算法 BOA-LSTM时间序列预测模型 #含预测未来功能,以及优化结构层数及单双向类型 研究工作量丰富且新颖
【MATLAB第34期】 MATLAB 2023年棕熊算法 BOA-LSTM时间序列预测模型 #含预测未来功能,以及优化结构层数及单双向类型 研究工作量丰富且新颖
|
5月前
|
机器学习/深度学习 文字识别 算法
【Keras计算机视觉OCR文字识别】文字检测算法中CTPN、CRAFT的讲解(图文解释 超详细)
【Keras计算机视觉OCR文字识别】文字检测算法中CTPN、CRAFT的讲解(图文解释 超详细)
60 0
|
10月前
|
机器学习/深度学习 算法
【MATLAB第36期】基于MATLAB的QOWOA-LSTM鲸鱼优化算法准反向策略的WOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富
【MATLAB第36期】基于MATLAB的QOWOA-LSTM鲸鱼优化算法准反向策略的WOA优化LSTM时间序列预测模型 优势明显,注释详细,绘图丰富
|
机器学习/深度学习 算法
DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理
DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理
DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理
|
10天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
25天前
|
机器学习/深度学习 算法
【MATLAB】GA_BP神经网络时序预测算法
【MATLAB】GA_BP神经网络时序预测算法
33 8
|
29天前
|
机器学习/深度学习 算法 Serverless
【MATLAB】PSO_BP神经网络回归预测算法(适用光伏发电回归预测等)
【MATLAB】PSO_BP神经网络回归预测算法(适用光伏发电回归预测等)
30 1
|
1天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。