牛客 牛牛的独特子序列(双指针/二分查找)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 双指针
      • 2.2 二分查找

1. 题目

链接:https://ac.nowcoder.com/acm/contest/9752/B
来源:牛客网

牛牛现在有一个长度为len只包含小写字母‘a’-'z’的字符串x,他现在想要一个特殊的子序列
这个子序列的长度为3*n(n为非负整数),
子序列的第[1,n]个字母全部为‘a’,
子序列的[n+1,2*n]个字母全部为‘b’,
子序列的[2*n+1,3*n]个字母全部为‘c’,
牛牛想知道最长的符合条件的独特子序列的长度是多少。

示例1
输入
"cbacb"
返回值
0
说明
没有符合条件的非空子序列,所以输出0示例2
输入
"abaabbcccc"
返回值
6
说明
最长的符合条件的子序列为"aabbcc",所以输出6

2. 解题

2.1 双指针

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可* * @param x string字符串 * @return int整型*/// typedef pair<int,int> pii;int Maximumlength(string x) {// write code herestring s;for(auto c : x)if(c=='a' || c=='b' || c=='c')s += c; //只需要abc字符int n = s.size();if(n < 3) return 0;vector<int> numa(n+1, 0), numb(n+1, 0), numc(n+1, 0);//前缀和个数for(int i = 1; i <= n; i++){if(s[i-1] == 'a'){numa[i] = numa[i-1] + 1;numb[i] = numb[i-1];numc[i] = numc[i-1];}else if(s[i-1] == 'b'){numa[i] = numa[i-1];numb[i] = numb[i-1]+1;numc[i] = numc[i-1];}else{numa[i] = numa[i-1];numb[i] = numb[i-1];numc[i] = numc[i-1]+1;}}int ans = 0, a = 0, b= 0, c= 0;int i = 1, j = n;// 贪心,让 a c,交替变多while(i <= j){int MIN = min(a,min(b,c));//数量最少的if(MIN == a){a = numa[i++];}else if(MIN == c){c = numc[n]-numc[--j];}elsebreak;b = numb[j]-numb[i-1];ans = max(ans, 3*min(a,min(b,c)));}return ans;}
};

2.2 二分查找

通用解法

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可* * @param x string字符串 * @return int整型*/// typedef pair<int,int> pii;int Maximumlength(string x) {// write code herestring s;for(auto c : x)if(c=='a' || c=='b' || c=='c')s += c;int n = s.size();if(n < 3) return 0;int l = 0, r = n/3, mid, ans = 0;while(l <= r){mid = (l+r)/2;if(ok(s, mid)){ans = mid*3;l = mid+1;}elser = mid-1;}return ans;}bool ok(string& s, int n){int a = 0, b =0, c = 0;for(int i = 0; i < s.size(); ++i){if(a < n){if(s[i] == 'a')a++;}else if(b < n){if(s[i]== 'b')b++;}else{if(s[i] == 'c')c++;}}return c >= n;}
};

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

TCPIP通信

最近在开发TCPIP通信&#xff0c;封装了3个类&#xff0c;望各位大神指点指点。1 using System;2 using System.Collections.Generic;3 using System.Text;4 using System.Net.Sockets;5 using System.Threading;6 using System.Net;7 using System.Linq;8 using System.Net.Ne…

Python 20 秒画完小猪佩奇“社会人”!

每天写代码的程序员&#xff0c;你们知道今年社交平台上最火的带货女王是谁吗&#xff1f;范冰冰&#xff1f;杨幂&#xff1f;Angelababy&#xff1f;不&#xff0c;是猪猪女孩小猪佩奇。 如果你经常用抖音、快手、B 站、知乎、微博……或者类似的任何一个内容或社交平台&…

使用RNN预测文档归属作者

文章目录1. 文本处理2. 文本序列化3. 数据集拆分4. 建立RNN模型5. 训练6. 测试参考 基于深度学习的自然语言处理 1. 文本处理 数据预览 # 有两个作者的文章&#xff08;A, B&#xff09;&#xff0c;定义为0&#xff0c; 1 A 0 # hamilton B 1 # madison UNKNOWN -1# 把…

Python进阶-函数默认参数,特别是参数传递为空列表

这两天遇到函数默认参数的bug&#xff0c;在互联网上好好总结了一下&#xff1a;如非特别说明&#xff0c;下文均基于Python3一、默认参数 python为了简化函数的调用&#xff0c;提供了默认参数机制&#xff1a;def pow(x, n 2):r 1while n > 0:r * xn - 1return r这样在调…

java中的Switch case语句

java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量)&#xff0c;变量只能是整型或者字符型&#xff0c;程序先读出这个变量的值&#xff0c;然后在各个"case"里查找哪个值和这个变量相等,如果相等,则条件成立,程序执行相…

LeetCode 1674. 使数组互补的最少操作次数(差分思想)

文章目录1. 题目2. 解题1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit 。 每一次操作&#xff0c;你可以将 nums 中的任何整数替换为 1 到 limit 之间的另一个整数。 如果对于所有下标 i&#xff08;下标从 0 开始&#xff09;&#xff0c;nums[i] nums[…

python 数据分析-读写数据csv、xlsx文件

1、读写csv文件可以使用基础python实现&#xff0c;或者使用csv模块、pandas模块实现。 基础python读写csv文件 读写单个CSV 以下为通过基础python读取CSV文件的代码&#xff0c;请注意&#xff0c;若字段中的值包含有","且该值没有被引号括起来&#xff0c;则无法…

c#将list集合转换为datatable的简单办法

public static class ExtensionMethods { /// <summary> /// 将List转换成DataTable /// </summary> /// <typeparam name"T"></typeparam> /// <param name"data"></param&g…

Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索

&#xff3b;导读&#xff3d;Kaggle 的房价预测竞赛从 2016 年 8 月开始&#xff0c;到 2017 年 2 月结束。这段时间内&#xff0c;超过 2000 多人参与比赛&#xff0c;选手采用高级回归技术&#xff0c;基于我们给出的 79 个特征&#xff0c;对房屋的售价进行了准确的预测。今…

使用GRU单元的RNN模型生成唐诗

文章目录1. 读取数据2. 字符索引3. 创建文本序列4. 创建文本编码序列5. 使用GRU单元建立RNN模型6. 文本生成参考 基于深度学习的自然语言处理 本文使用 GRU 单元建立 RNN 网络&#xff0c;使用唐诗三百首进行训练&#xff0c;使用模型生成唐诗。 GRU RNN 网络能够克服简单RNN…

循环与分支

1. 循环 for循环for arg in [list] 这是一个基本的循环结构. 它与C语言中的for循环结构有很大的不同.for arg in [list]docommand(s)...done for arg in "$var1" "$var2" "$var3" ... "$varN" 在[list]中的参数加上双引号是为了阻止单…

Python数据结构常见的八大排序算法(详细整理)

前言 八大排序&#xff0c;三大查找是《数据结构》当中非常基础的知识点&#xff0c;在这里为了复习顺带总结了一下常见的八种排序算法。 常见的八大排序算法&#xff0c;他们之间关系如下&#xff1a; 排序算法.png 他们的性能比较&#xff1a; 下面&#xff0c;利用Python分别…

牛客 牛牛选物(01背包)

文章目录1. 题目2. 解题1. 题目 链接&#xff1a;https://ac.nowcoder.com/acm/contest/9887/A 来源&#xff1a;牛客网 牛牛有现在有n个物品&#xff0c;每个物品有一个体积v[i]和重量g[i],他想选择其中总体积恰好为V的若干个物品&#xff0c;想使这若干个物品的总重量最大&…

asp.net学习之再论sqlDataSource

asp.net学习之再论sqlDataSource 原文:asp.net学习之再论sqlDataSource本节从上一节没有阐述的几个方面&#xff0c;再讨论一下SqlDataSource的用法及注意的事项。 上一节的链接地址如下&#xff1a;http://www.cnblogs.com/shipfi/archive/2009/10/15/1584093.html 1. S…

微信小程序最常用的布局——Flex布局

最近在学习微信小程序&#xff0c;在设计首页布局的时候&#xff0c;新认识了一种布局方式display:flex 1 .container { 2 display: flex; 3 flex-direction: column; 4 align-items: center; 5 background-color: #b3d4db; 6 } 编译之后的效果很明显&#xff0c;界面…

LeetCode 649. Dota2 参议院(循环队列)

文章目录1. 题目2. 解题1. 题目 Dota2 的世界里有两个阵营&#xff1a;Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中&#xff0c;每一位参议员都可以行…

'[linux下tomcat 配置

tomcat目录结构bin ——Tomcat执行脚本目录 conf ——Tomcat配置文件 lib ——Tomcat运行需要的库文件&#xff08;JARS&#xff09; logs ——Tomcat执行时的LOG文件 temp ——Tomcat临时文件存放目录 webapps ——Tomcat的主要Web发布目录&#xff08;存放我们自己的JSP,SER…

微信小程序基础(一)

一.注册小程序账号&#xff0c;下载IDE 1.官网注册https://mp.weixin.qq.com/&#xff0c;并下载IDE。 2.官方文档一向都是最好的学习资料。 注意&#xff1a; &#xff08;1&#xff09;注册账号之后会有一个appid&#xff0c;新建项目的时候需要填上&#xff0c;不然很多…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(RNN/GRU/LSTM)

文章目录1. 读入数据2. 文本处理3. 建模4. 训练5. 测试练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文 [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;spacy&#xff09; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff…

禁止网页复制

<SCRIPT LANGUAGEjavascript>function click() {alert(禁止你的左键复制&#xff01;) }function click1() {if (event.button2) {alert(禁止右键点击~&#xff01;) }}function CtrlKeyDown(){if (event.ctrlKey) {alert(不当的拷贝将损害您的系统&#xff01;) }}docum…