题目描述:
给你两个字符串 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 <= 105
a 和 b 只由小写字母组成

方法1:
主要思路:解题链接汇总
(1)分别计算出满足条件1,2,3时,需要改变的最小数,然后取三个值中的最小值;

class Solution {public:int minCharacters(string a, string b) {vector<int> counts_a(26,0);vector<int>counts_b(26,0);//先统计出原字符串各个字符的个数for(char&ch:a){++counts_a[ch-'a'];}for(char&ch:b){++counts_b[ch-'a'];}//初始化满足三个条件的最小改变次数int need_change_1=INT_MAX;int need_change_2=INT_MAX;int need_change_3=INT_MAX;//条件1int left=counts_a[0];int right=b.size()-counts_b[0];for(int i=1;i<26;++i){int tmp=a.size()-left+b.size()-right;need_change_1=min(need_change_1,tmp);left+=counts_a[i];right-=counts_b[i];}//条件2left=counts_b[0];right=a.size()-counts_a[0];for(int i=1;i<26;++i){int tmp=b.size()-left+a.size()-right;need_change_2=min(need_change_2,tmp);left+=counts_b[i];right-=counts_a[i];}//条件3if(a.size()==b.size()){int n=INT_MIN;for(int i=0;i<26;++i){n=max(n,counts_a[i]+counts_b[i]);}need_change_3=2*a.size()-n;}//返回最小值return min(need_change_1,min(need_change_2,need_change_3));}
};

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

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

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

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

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

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

    文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 a 和 b ,二者均由小写字母组成. 一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 . 操作的最终目标是满足下列 ...

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

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

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

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

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

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

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

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

  8. shell统计每一行字符数的三种方法

    shell统计每一行字符数的三种方法 $cat test.txt SlNAC2 ,SlNAC2_2 ,SlNAC2_2 ##### 方法一: $awk -F "" '{print ...

  9. 键盘录入一个字符串要求长度为8不符合输出错误符合条件将字符串中所有大写字符替换成M

    键盘录入一个字符串要求长度为8不符合输出错误符合条件将字符串中所有大写字符替换成M 方式一:不使用正则 import java.util.Scanner; public class Test { pu ...

最新文章

  1. C语言语句单选题,C语言练习题
  2. SDK Instrumentation创建一个Note的实例
  3. RobotFramework下的http接口自动化Set Request Body 关键字的使用
  4. java窗口坐标_如何在Java中获取窗口外部的鼠标单击坐标
  5. javascript对象和json字符串之间转换的问题
  6. Oracle的解惑一二to date 与24小时制表示法及mm分钟的显示
  7. sqlserver存储过程入门之 游标
  8. java 拖动图片放大_Android 图片拖拽、放大缩小的自定义控件
  9. hdu1284经典钱币兑换问题
  10. php $_post多个,使用PHP检查多个$ _ POST字词
  11. python3编程入门_python3编程基础之一:操作
  12. linux安装vmwareTools
  13. can't init script for
  14. 必装 6 款超神的 GitHub 插件
  15. 仿某云宝一元云购系统网站源码v1.0
  16. 基于NB-IOT的智能烟感应用方案
  17. LG 的数学计划 ---- 第三步 欧几里得算法和扩展欧几里得
  18. Python获取局域网IP(ping)
  19. STM32之震动传感器、继电器介绍及实战
  20. 单片机 LCD1602显示实验

热门文章

  1. 重温数据结构:深入理解红黑树
  2. HashMap 源码深度分析
  3. 记一次数据丢失(电脑硬盘closed to down)的经历
  4. 8. 【gRPC系列学习】resetTransport建立TCP连接流程
  5. 大数据面试演讲稿 离线数仓实时分析
  6. 通达信接口测速器的分类
  7. 计算机数据恢复视频教程,快速扫描误删除文件 文件数据恢复软件 视频文件数据恢复效果最佳...
  8. CSS (Cascading Style Sheets)
  9. CSS(Cascading Style Sheets) 层叠样式表
  10. 视频教程-使用Objective-C进行iOS移动开发-iOS