1. 题目

有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 “x” 和 “y”,你需要通过「交换字符」的方式使这两个字符串相同。

每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。

交换只能发生在两个不同的字符串之间,绝对不能发生在同一个字符串内部。也就是说,我们可以交换 s1[i] 和 s2[j],但不能交换 s1[i] 和 s1[j]。

最后,请你返回使 s1 和 s2 相同的最小交换次数,如果没有方法能够使得这两个字符串相同,则返回 -1 。

示例 1:
输入:s1 = "xx", s2 = "yy"
输出:1
解释:
交换 s1[0] 和 s2[1],得到 s1 = "yx",s2 = "yx"。示例 2:
输入:s1 = "xy", s2 = "yx"
输出:2
解释:
交换 s1[0] 和 s2[0],得到 s1 = "yy",s2 = "xx" 。
交换 s1[0] 和 s2[1],得到 s1 = "xy",s2 = "xy" 。
注意,你不能交换 s1[0] 和 s1[1] 使得 s1 变成 "yx",因为我们只能交换属于两个不同字符串的字符。示例 3:
输入:s1 = "xx", s2 = "xy"
输出:-1示例 4:
输入:s1 = "xxyyxyxyxx", s2 = "xyyxyxxxyx"
输出:4提示:
1 <= s1.length, s2.length <= 1000
s1, s2 只包含 'x' 或 'y'。

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

2. 解题

  • 统计不相同的位:x-y 或者 y-x
  • x-y,x-y,出现2次,交换1次即可使之相等
  • 同理y-x, y-x,出现2次,交换1次即可
  • 最后如果存在单个的,不能交换使之相等
  • 如果存在一个x-y, y-x, 需要交换2次使之相等
class Solution {public:int minimumSwap(string s1, string s2) {int count1 = 0, count2 = 0, i, ans = 0;for(i = 0; i < s1.size(); ++i){if(s1[i]=='x' && s2[i]=='y')count1++;else if(s1[i]=='y' && s2[i]=='x')count2++;}if((count1+count2)%2)return -1;ans += count1/2 + count2/2;count1 %= 2;count2 %= 2;if(count1+count2 == 2)ans += 2;return ans;}
};

LeetCode 1247. 交换字符使得字符串相同相关推荐

  1. 1247. 交换字符使得字符串相同

    1247. 交换字符使得字符串相同 难度中等162收藏分享切换为英文接收动态反馈 有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y&qu ...

  2. 【1247. 交换字符使得字符串相同】

    来源:力扣(LeetCode) 描述: 有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y",你需要通过「交换字符」的方式使这两 ...

  3. Leetcode1247. 交换字符使得字符串相同

    ​ Every day a leetcode 题目来源:1247. 交换字符使得字符串相同 解法:贪心 由于要求交换次数尽量少,故: 本来相同位置就有相同的字符,不需要交换. 本来相同位置字符不同,需 ...

  4. 交换字符使得字符串相同[贪心]

    贪心 前言 一.交换字符使得字符串相同 二.贪心 1.分析问题的思路过程 2.go 总结 参考资料 前言 贪心算法,必须先看清楚有哪些选择,才能在这些选择的基础上进行贪心,做最优选择,除此之外,还得看 ...

  5. leetcode1247. 交换字符使得字符串相同(贪心)

    有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y",你需要通过「交换字符」的方式使这两个字符串相同. 每次「交换字符」的时候, ...

  6. LeetCode 1957. 删除字符使字符串变好

    文章目录 1. 题目 2. 解题 1. 题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请 ...

  7. C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数

    C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在C ...

  8. 5193. 删除字符使字符串变好

    5193. 删除字符使字符串变好 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后 ...

  9. [剑指offer]面试题第[67]题[Leetcode][JAVA][第8题] 字符串转换整数 (atoi)[字符串]

    [问题描述] 请你来实现一个 atoi 函数,使其能将字符串转换成整数.首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止.接下来的转化规则如下:如果第一个非空字符为正或者 ...

最新文章

  1. 后处理安装_你所不了解的国六后处理
  2. vue实现星级评价效果
  3. Windows 8操作技巧之快捷键大全
  4. java 内存指针_C指针和内存
  5. matlab 引号内变量,MATLAB 7.0 单引号内变量现实问题!
  6. Linux 重启php
  7. [数分提高]2014-2015-2第1教学周第2次课
  8. 学习动态性能表3----v$session_wait
  9. PowerDesigner中主键外键唯一键设置
  10. 使用threejs开发微信小游戏全过程
  11. linux下输入ls显示时间格式,【Linux基础】linux下修改ls显示的时间格式
  12. Library Genesis
  13. 学前端到了CSS阶段,你一定要掌握这9大防御式开发技能
  14. 用VC实现Html编辑器
  15. ENVI水体提取流程实践与问题
  16. html鼹鼠出现不重叠,洛谷 P2285 BZOJ 1207 [HNOI2004]打鼹鼠
  17. 高通退出服务器芯片市场,华为会跟随退出么?
  18. 周易之阿拉伯几何原本谭
  19. RNA 30. SCI文章中基于TCGA和GTEx数据挖掘神器(GEPIA2)
  20. 支付宝的下个千亿生意!揭秘阿里智能公交布局

热门文章

  1. 让Windows7 x64 IIS7支持32位应用程序
  2. CentOS安装Confluence Wiki步骤
  3. 分布式为什么使用Redis
  4. 虚拟机Centos7配置网络
  5. CentOS 6.8 虚拟机安装详解
  6. Python核心编程-细节
  7. Maven 入门 (1)—— 安装
  8. linux-3.4.2移植到FL2440上(一)--只是基本移植
  9. Unparsed aapt error(s)! Check the console for output
  10. Linux 资料大全