文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你两个字符串 a 和 b ,二者均由小写字母组成。
一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 。

操作的最终目标是满足下列三个条件 之一 :

  • a 中的 每个字母 在字母表中 严格小于 b 中的 每个字母 。
  • b 中的 每个字母 在字母表中 严格小于 a 中的 每个字母 。
  • a 和 b 都 由 同一个 字母组成。

返回达成目标所需的 最少 操作数。

示例 1:
输入:a = "aba", b = "caa"
输出:2
解释:满足每个条件的最佳方案分别是:
1) 将 b 变为 "ccc",2 次操作,满足 a 中的每个字母都小于 b 中的每个字母;
2) 将 a 变为 "bbb" 并将 b 变为 "aaa",3 次操作,满足 b 中的每个字母都小于 a 中的每个字母;
3) 将 a 变为 "aaa" 并将 b 变为 "aaa",2 次操作,满足 a 和 b 由同一个字母组成。
最佳的方案只需要 2 次操作(满足条件 1 或者条件 3)。示例 2:
输入:a = "dabadd", b = "cda"
输出:3
解释:满足条件 1 的最佳方案是将 b 变为 "eee" 。提示:
1 <= a.length, b.length <= 10^5
a 和 b 只由小写字母组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/change-minimum-characters-to-satisfy-one-of-three-conditions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 计数,遍历,比赛的时候细节出了问题,一直过不了最后一个例子
class Solution {public:int minCharacters(string a, string b) {int n1[26] = {0}, n2[26] = {0};int n[26] = {0};char maxa='a', mina='z', maxb = 'a', minb = 'z';for(auto c : a){n1[c-'a']++;n[c-'a']++;maxa = max(maxa, c);mina = min(mina, c);}for(auto c : b){n2[c-'a']++;n[c-'a']++;maxb = max(maxb, c);minb = min(minb, c);}// 自然满足条件if(minb > maxa || mina > maxb) return 0;int maxchar = 0;//所有字符最多的for(int i= 0; i < 26; i++)maxchar = max(maxchar, n[i]);int ans = a.size()+b.size()-maxchar;//两人都变成这个字符// 以下是比赛时写错的代码,最后一个例子过不了// ---------------------// "a"// "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"// --------------------------------------// int numa = 0, numb = 0;// for(int i = 0; i < 26; i++)// {//     numa += n1[i];//     numb += n2[i];//     ans = min(ans, int(a.size())-numa+numb);//     ans = min(ans, int(b.size())-numb+numa);// }// 要改的话,就是把 26 改成 25,a [i+1,25] 的字符改到前面,+ b [0, i] 的改到后面// i+1 < 26 , i < 25int numa = n1[0], numb = n2[0]; for(int i = 1; i < 26; i++){// a [i,25] 的字符改到前面,+ b [0, i-1] 的改到后面ans = min(ans, int(a.size())-numa+numb);// b [i,25] 的字符改到前面,+ a [0, i-1] 的改到后面ans = min(ans, int(b.size())-numb+numa);numa += n1[i];numb += n2[i];}return ans;}
};

60 ms 14.5 MB C++


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

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

LeetCode 1737. 满足三条件之一需改变的最少字符数(计数)相关推荐

  1. LeetCode——1737. 满足三条件之一需改变的最少字符数(Change Minimum Characters to Satisfy One of Three...)——分析及代码(Java)

    LeetCode--1737. 满足三条件之一需改变的最少字符数[Change Minimum Characters to Satisfy One of Three Conditions]--分析及代 ...

  2. leetcode 1737. 满足三条件之一需改变的最少字符数

    题目:https://leetcode-cn.com/problems/change-minimum-characters-to-satisfy-one-of-three-conditions/ 思路 ...

  3. 1737 - 满足三条件之一需改变的最少字符数 - 枚举 - 贪心

    欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 文章目录 题目描述 题目剖析&信息挖掘 解题思路 方法一 枚举+贪心 分析 思路 注意 知识点 复杂度 代码实现 相关题 ...

  4. 1737 满足三条件之一需改变的最少字符数

    题目描述: 给你两个字符串 a 和 b ,二者均由小写字母组成.一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 . 操作的最终目标是满足下列三个条件 之一 : a 中的 每个字 ...

  5. Leetcode-1737-满足三条件之一需改变的最少字符数

    题目 给你两个字符串 a 和 b ,二者均由小写字母组成.一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 . 操作的最终目标是满足下列三个条件 之一 : a 中的 每个字母 在 ...

  6. 计算机控制电梯如需改变功能 则,电梯维修项目教程 教学课件 作者 孙文涛附加答案试卷综合实训三模拟试题(13).doc...

    PAGE 5 深圳高级技工学校2011-2012学年第二学期 <电梯综合实训三>理论模拟试题(13) : 号 学 : 级 班 : 名 姓 ┄ ┄ ┄ ┄一一 ┄ ┄┄ ┄┄┄ 线 此 过 ...

  7. leetcode No.15-16 三数之和相关问题

    leetcode 15. 三数之和 题目 链接:https://leetcode-cn.com/problems/3sum 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 ...

  8. Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式

    Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式 actionNone : 回车键,按下后光标到下一行 actionGo : Go, actionSearch : 放大镜 a ...

  9. LeetCode 2186. 使两字符串互为字母异位词的最少步骤数

    文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 s 和 t .在一步操作中,你可以给 s 或者 t 追加 任一字符 . 返回使 s 和 t 互为 字母异位词 所需的最少步骤数. 字母异位 ...

最新文章

  1. 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)
  2. P1447 [NOI2010] 能量采集
  3. 在百度搜索页添加公司总部的客服电话
  4. foreach 循环达到条件的第一次就停止_是否应该停止在JavaScript代码中使用forEach()?...
  5. Tomcat学习总结(11)——Linux下的Tomcat安全优化
  6. 因下面文的损坏或丢失windows/system32/config/system 解决方法
  7. Docker使用小结(一)Docker镜像以及Docker容器
  8. Android 下拉刷新库,这一个就够了!
  9. linux date 得到指定 datemonth 月的 开始一天 结束一天
  10. 淘宝全屏轮播代码怎么做?淘宝轮播天猫全屏轮播代码
  11. 国产快速启动软件ALTRun推荐
  12. [PMP] 什么是从众效应
  13. python卡方检验kf_Python 卡方检验
  14. 周公恐惧流言日,王莽谦恭未篡时
  15. 计算机图形学入门(十二)-阴影映射Shadow mapping(为光线追踪准备)
  16. DIY制作高精度低温漂电阻箱0.1~9.9GΩ(1)-- 项目介绍
  17. 自编Photoshop简单教程
  18. Android横向滚动卡片,RecyclerView+CardView实现横向卡片式滑动效果
  19. python unicode编码转换中文_python实现unicode转中文及转换默认编码的方法
  20. 多态 在游戏程序实例

热门文章

  1. linux mysql安装_Linux下安装mysql服务(超详细)
  2. windows和linux加密u盘,linux挂载windows的各种格式U盘
  3. matlab中关于@的作用(函数表达式句柄)
  4. android gb2312 utf-8,不同编码页面之间用form传值出现乱码问题解决方案 utf-8 到 gb2312...
  5. 将数据渲染到页面的几种方式
  6. Go语言web框架 gin
  7. Cron表达式 详解
  8. 【nodejs】安装browser-sync 遇到错误提示
  9. viewpager 跳转到指定页面
  10. 抽象类(Abstract)和接口的不同点、共同点(Interface)。