最长的子序列,其字符与子串相同,并且频率差最多为K

最长的子序列,其字符与子串相同,并且频率差最多为k

在这个问题中,我们会找到子序列的最大长度,使其包含连续的字符,并且所有字符的频率差不会超过K。

我们需要找到给定字符串的所有可能的子序列,并检查它是否连续包含每个字符以及最大频率差以获得输出。

问题陈述– 我们给出了一个包含小写字母字符的字符串 alpha。另外,我们已经给出了正整数 K。我们需要找到给定字符串的子序列的最大长度,使其遵循以下规则。

特定字符的所有出现都应该是连续的。

字符出现频率的差值不能大于K。

示例

输入

alpha = "ppppqrs", K = 2

输出

6

解释 – 我们可以采用“pppqrs”子序列。最大字符频率为3,最小字符频率为1。因此,差值为2。并且它连续包含所有字符。

输入

alpha = "abbbbc", K = 2

输出

5

解释 – 我们可以采用“abbbc”子序列。

输入

alpha = "mnnnnnnno", k = 3;

输出

7

解释 – 我们可以采用“nnnnnnn”子序列。

方法 1

在这种方法中,我们将使用递归函数来查找给定长度的所有子序列。此外,我们将定义函数来检查子序列是否连续包含所有字符。我们将使用地图数据结构来计算最大和最小频率差异。

算法

第 1 步 – 定义“f”映射来存储字符的频率。

步骤 2 – 如果开始等于临时字符串的长度,并且字符串长度大于 0,请按照以下步骤操作。

第 3 步 – 初始化“minf”和“maxf”变量来存储最小和最大频率。

第 4 步– 清除地图,并将每个字符的出现频率存储在地图中。

第 5 步 – 遍历地图值并找到最大和最小频率值。

步骤6 – 如果最大和最小频率差小于或等于K,则检查字符串是否包含连续字符。

步骤 6.1 – 在 checkForContinously() 函数中,定义“pos”映射来存储特定字符的最后位置。

步骤 6.2 – 遍历字符串。如果地图中存在当前字符,并且该字符的当前位置与最后位置之间的差值小于1,则更新最后位置。否则,返回 false。

步骤 6.3 – 如果角色不存在,则将角色添加到地图。

步骤 6.4 – 最后返回 true。

步骤7 – 如果字符串包含连续字符,并且频率差小于K,如果’maxi’的值小于当前子序列的长度,则更新’maxi’的值。 p>

第 8 步 – 排除当前字符后进行递归调用。

步骤 9 – 将当前字符附加到临时字符串的末尾。另外,使用更新后的“tmp”字符串进行递归调用。

示例

#include using namespace std;int maxi = 0;// Check for continuous characters in the substringbool CheckForContinuous(string &tmp) {    // map to store the last index of the character    unordered_map pos;    for (int p = 0; p < tmp.length(); p++) {        // When the last index exists in the map        if (pos[tmp[p]]) {            // If the last index is adjacent to the current index            if (p - pos[tmp[p]] + 1 <= 1)                pos[tmp[p]] = p + 1;            else                return false;        } else {            // When the map doesn't have a character as a key            pos[tmp[p]] = p + 1;        }    }    return true;}void getLongestSubSeq(string &alpha, string tmp, int start, int &k) {    // To store the character's frequency    unordered_map f;    if (start == alpha.length()) {        if (tmp.length() > 0) {            // To store minimum and maximum frequency of characters            int minf = INT_MAX, maxf = INT_MIN;            // Make map empty            f.clear();            // Store frequency of characters in the map            for (int p = 0; p < tmp.length(); p++)                f[tmp[p]]++;            // Get minimum and maximum value from the map            for (auto &key : f) {                minf = min(minf, key.second);                maxf = max(maxf, key.second);            }            // Validate substring for frequency difference and continuous characters            if (maxf - minf <= k && CheckForContinuous(tmp))                maxi = max(maxi, (int)tmp.length());        }        return;    }    // Exclude current character    getLongestSubSeq(alpha, tmp, start + 1, k);    // Include current character    tmp.push_back(alpha[start]);    getLongestSubSeq(alpha, tmp, start + 1, k);}int main() {    string alpha = "ppppqrs", tmp;    int k = 2;    getLongestSubSeq(alpha, tmp, 0, k);    cout <<"The maximum length of the substring according to the given conditions is " << maxi;    return 0;}

输出

The maximum length of the substring according to the given conditions is 6

时间复杂度 – O(N*2N),其中 O(N) 用于检查连续字符,O(2N) 用于查找所有子序列。

空间复杂度 – O(N) 来存储临时子序列。

我们使用简单的方法来查找给定字符串的所有子序列。然而,这是非常耗时的。不建议对大字符串使用此方法来解决问题。

以上就是最长的子序列,其字符与子串相同,并且频率差最多为K的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:49:08
下一篇 2025年12月17日 21:49:19

相关推荐

  • css如何设置首行缩进2个字符

    css设置首行缩进2个字符的方法:可以利用text-indent属性来设置首行缩进2个字符,如【text-indent:2em;】。text-index属性用于规定文本块中首行文本的缩进,em是相对单位。 相关属性: text-indent 属性规定文本块中首行文本的缩进。 (视频教程推荐:css视…

    2025年12月24日
    000
  • HTML结构优化:高效移除标签内的标签

    本教程详细介绍了如何通过编程方式移除HTML文档中嵌套在“标签内的“标签,从而优化HTML结构。文章提供了纯JavaScript(适用于浏览器环境)和Node.js(结合`jsdom`库)两种实现方案,并附带示例代码和关键注意事项,帮助开发者实现更简洁、语义化的网页内容。 HTML结构…

    2025年12月23日
    000
  • 从OpenAI API响应中高效提取生成文本

    本文旨在指导开发者如何正确解析OpenAI API返回的JSON格式响应,并从中提取所需的生成文本内容。通过详细的步骤和代码示例,我们将展示如何使用`JSON.parse()`方法处理API响应,并精确访问`choices[0].text`属性以获取核心文本输出,同时探讨处理多条生成结果的方法及相关…

    2025年12月23日
    000
  • 动态调整HTML表格列顺序的JavaScript教程

    本教程详细阐述了如何使用javascript动态重排html表格的列顺序。文章从基础的html表格结构出发,深入解析了通过dom操作实现列重排的核心原理,提供了两种不同粒度的javascript代码示例,包括一个简洁的单行解决方案和一个更具通用性的函数实现。同时,教程还涵盖了在实际应用中需要注意的性…

    2025年12月23日
    000
  • 如何将html特殊字符编码转换成特殊字符?有什么方法

    本篇文章给大家带来的内容是关于如何将html特殊字符编码转换成特殊字符?有什么方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 备注:有时候我们会莫名其妙遇到一些特殊字符:  这些字符在网页上能正常显示,但是在APP特殊情景并不识别这些字符: 如:’     这个其实…

    2025年12月21日
    000
  • JavaScript字符串中提取数字的多种方法

    本文详细介绍了在javascript中从字符串提取数字的多种实用方法,重点讲解了如何利用正则表达式的`match()`方法和`split()`方法结合`parseint()`来实现。文章通过具体代码示例,展示了如何高效、准确地从“step-1”这类格式的字符串中获取数字部分,并强调了`parsein…

    2025年12月21日
    000
  • 使用jQuery each 循环为XML元素动态生成递增ID

    本文详细介绍了如何在jQuery的each循环中,利用其提供的索引i结合JavaScript的模板字面量,为动态生成的XML元素赋予自增的ID属性。通过将i+1嵌入到元素字符串中,可以轻松实现从1开始的连续ID,从而满足在XML构建过程中为元素分配唯一标识的需求。 背景与需求分析 在web开发中,我…

    2025年12月20日
    000
  • 字母位置和频率奇偶相同的字母数量的奇偶性

    在这个问题中,我们将计算频率和位置具有相同奇偶校验的字符的数量,并打印该数字的计数为奇数或偶数。 为了解决这个问题,我们可以找到字符串中每个字符的频率,并统计频率和位置具有相同奇偶校验的字符总数。之后,我们可以根据计数打印奇数或偶数答案。 问题陈述 – 我们给出了一个仅包含小写英文字母字…

    2025年12月17日
    000
  • 根据给定条件确定具有最多1的子序列的最小步骤

    本文的目的是实现一个程序,以找到最小步骤来根据给定条件确定最大 1 秒的子序列。 众所周知,包含以 null 结尾的字符的一维数组可以用来定义字符串。 给定一个长度为 K 的字符串 Str,其中 K 始终为偶数,并且包含字符“0”、“1”和“?”将字符串分为两个单独的字符串,我们将它们称为 Str1…

    2025年12月17日
    000
  • 检查字符串的字符是否可以通过替换’_’来变得非递减

    在本文中,我们将深入探讨字符串操作领域中一个有趣的问题:如何通过替换“?”字符来检查给定字符串的字符是否可以变为非递减顺序。这个问题为您提供了一个练习C++中字符串操作和条件检查技巧的绝佳机会。 Problem Statement Given a string consisting of alpha…

    2025年12月17日
    000
  • 将字符串A所需附加的最小子序列以获得字符串B

    在这个问题中,我们需要使用str1的子序列来构造str2。为了解决这个问题,我们可以找到str1的子序列,使其能够覆盖最大长度为str2的子串。在这里,我们将学习两种不同的方法来解决问题。 问题陈述 – 我们给出了两个不同长度的字符串:str1 和 str2。我们需要按照以下条件从 str1 构造 …

    2025年12月17日
    000
  • 将字符重新排列以形成回文(如果可能)在C++中

    我们被给定一个长度为任意给定长度的字符串’str’。任务是重新排列字符,使输出成为一个回文字符串,而不添加或删除给定输入字符串中的字符。回文字符串是指字符以一种方式排列,使得它们从开始到结束发音相同。 让我们看看这个的各种输入输出场景 – 输入 – 字…

    2025年12月17日
    000
  • 检查每个单词的字符是否可以重新排列以形成等差数列(AP)

    在本文中,我们将讨论如何检查给定字符串中每个单词的字符是否可以重新排列以形成等差数列(AP)。我们还将使用C++实现解决方案,并提供一个示例来说明代码的工作原理。 等差数列(AP) 等差数列(AP)是一组数字的序列,其中每个项都是通过将常数d添加到前一项来获得的。常数d被称为公差。 例如,序列 1,…

    2025年12月17日
    000
  • 按字符的ASCII值对字符串进行排序

    ASCII 值 ASCII(美国信息交换标准代码)是计算机和互联网上文​​本数据最常见的字符编码格式。在标准 ASCII 编码数据中,256 个字母、数字或特殊附加字符和控制代码都有唯一值。 问题陈述 现在,在这个问题中,我们需要根据字符的 ASCII 值按升序找到排序后的字符串,其中该字符串将是用…

    2025年12月17日
    000
  • 计算要与频率大于其他字符频率之和的字符连接的字符串数量

    我们的主要目标是确定最多的字符串能够被连接起来,以确保只有一个字母的频率超过所有其他字符的总和,前提是有一个名为arr[]的包含M个字符串的数组。 在继续之前,让我们了解一些数组和字符串的基本概念。 数组就是一组相同数据类型的元素,存储在连续的内存区域中。 C编程语言中的数组具有固定的大小,这意味着…

    2025年12月17日
    000
  • 链表中出现次数最多的字符

    我们给定了一个字符单链表,我们的任务是打印链表中出现次数最多的字符。如果多个字符出现的次数相同,则打印最后出现的字符。 单链表是一种由节点组成的线性数据结构。每个节点都包含数据和指向下一个节点的指针,该指针包含下一个节点的内存地址,因为分配给每个节点的内存不是连续的。 示例 假设我们已经给出了一个字…

    2025年12月17日
    000
  • 数组元素的频率是否为质数?

    Suppose we have one array. we have to count how many of the elements present in the array prime number of times. So if the array is {1, 2, 2, 0, 1, 5,…

    2025年12月17日
    000
  • putchar函数可以向终端输出一个字符么

    putchar函数可以向终端输出一个字符。putchar函数是C库函数,它可以把参数char指定的字符写入到标准输出中。putchar函数声明:【int putchar(int char)】,其中,参数char就是要被写入的字符。 putchar函数可以向终端输出一个字符,它是c语言函数之一。 (推…

    2025年12月17日
    000
  • 输入一个字符,如何判断是字母,数字还是特殊字符

    输入一个字符,如何判断是字母,数字还是特殊字符 方法如下: 1、使用格式符%c获得输入的字符; 2、判断该字符在ascii码表中的位置即可。 #include int main(){ char ch; printf(“请输入一个字符”); scanf(“%c”,&ch); if(ch &gt…

    2025年12月17日
    000
  • Flutter应用中通过PHP API安全获取MySQL插入ID的实现指南

    本教程详细介绍了如何在flutter应用中,通过php api安全地获取mysql数据库插入操作后生成的自增id。我们将重点讲解php后端如何使用预处理语句防止sql注入,并利用`insert_id`获取id,然后将其封装为json响应返回。前端flutter应用则负责解析该json,从而获取并利用…

    2025年12月12日
    000

发表回复

登录后才能评论
关注微信