文章目录

  • 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阿明),一起加油、一起学习进步!

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

  1. 【百日冲大厂】第二篇,牛客网选择题+排序子序列+倒置字符串

    前言: 大家好,我是良辰丫,今天是刷题的第二篇,牛客网选择题+排序子序列+倒置字符串,每天都去努力,每天都庆幸今天的自己比昨天的自己更优秀,加油,为理想而努力吧!!!

  2. 牛客 牛牛浇树(差分)

    文章目录 1. 题目 2. 解题 1. 题目 链接:https://ac.nowcoder.com/acm/contest/10323/A 来源:牛客网 牛牛现在在花园养了n棵树,按顺序从第1棵到第n ...

  3. 牛客 牛牛选物(01背包)

    文章目录 1. 题目 2. 解题 1. 题目 链接:https://ac.nowcoder.com/acm/contest/9887/A 来源:牛客网 牛牛有现在有n个物品,每个物品有一个体积v[i] ...

  4. 牛客 牛牛爱喝酒(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 链接:https://ac.nowcoder.com/acm/contest/9752/A 来源:牛客网 牛牛是一个酒鬼,非常爱喝酒, 一瓶酒m元钱, 两 ...

  5. 牛客 牛牛做除法II

    文章目录 1. 题目 2. 解题 1. 题目 链接:https://ac.nowcoder.com/acm/contest/9715/A 来源:牛客网 牛牛想知道在[0,n]范围中,选取一个最大的数x ...

  6. LeetCode 392. 判断子序列(双指针二分查找)

    1. 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 ...

  7. 牛客 牛牛与LCM(LCM)

    牛牛与LCM 链接:https://ac.nowcoder.com/acm/problem/21674 来源:牛客网 题目描述 牛牛最近在学习初等数论,他的数学老师给他出了一道题,他觉得太简单了, 懒 ...

  8. LeetCode 1940. 排序数组之间的最长公共子序列(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个由整数数组组成的数组arrays,其中arrays[i]是严格递增排序的,返回一个表示所有数组之间的最长公共子序列的整数数组. 子序列是从另一个序 ...

  9. LeetCode 475. 供暖器(双指针二分查找)

    文章目录 1. 题目 2. 解题 2.1 双指针 2. 二分查找 1. 题目 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置, ...

最新文章

  1. python3精要(21)-函数(2)
  2. JavaScript高阶函数快速入门
  3. AX2009 的EP开发要点
  4. jQuery学习(十一)— 常用的删除方法
  5. 隐藏控制台程序的窗口
  6. Vue关于axios跨域问题的解决
  7. LeetCode-144-Binary Tree Preorder Traversal
  8. 导出jar包和api文档
  9. cmd运行sql文件
  10. 获取b站网页html5,教给你4种方法下B站视频,得到真实地址的方法
  11. 免校准的电量计量芯片_电能计量专用芯片CS5460A
  12. java_opts=quot;-server,tomcat高并发的配置
  13. 计蒜客 T1853:非常男女(前缀和)
  14. 微信小程序扫码 ( wx.scanCode)的使用方法
  15. vijos P1443 银河英雄传说
  16. 浅谈程序员的英语学习 - 风口上的猪 - 博客园
  17. 计算机专业报考小学语文老师,各位大神,我是今年的专科应届毕业生,计算机应用专业,想当小学语文老师,考教师资格证对专业有限制吗?...
  18. 一个屌丝程序员的青春(三九六)
  19. window python 读取路径问题
  20. HackerRank: Jumping on the Clouds

热门文章

  1. html 缩略图点击预览,[每天进步一点点~] uni-app 点击图片实现预览图片列表
  2. html如何设置滑轮效果,HTML中鼠标滚轮事件onmousewheel处理
  3. beeline连接hiveserver2报错:User: root is not allowed to impersonate root
  4. c语言递归汉诺塔次数,汉诺塔问题(C语言经典递归问题(一))
  5. python实现哈希表
  6. Matlab与C/C++混合编程调用OpenCV
  7. 十字连接焊盘_你应该知道的焊盘基础知识
  8. 学会拒绝别人的6个技巧_多少人败在不懂拒绝上!牢记10个高情商拒绝技巧,人生越来越顺...
  9. c++远征之模板篇——运算符重载
  10. 知识点:Mysql 数据库索引优化实战(4)