LeetCode 1247. 交换字符使得字符串相同
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. 交换字符使得字符串相同相关推荐
- 1247. 交换字符使得字符串相同
1247. 交换字符使得字符串相同 难度中等162收藏分享切换为英文接收动态反馈 有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y&qu ...
- 【1247. 交换字符使得字符串相同】
来源:力扣(LeetCode) 描述: 有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y",你需要通过「交换字符」的方式使这两 ...
- Leetcode1247. 交换字符使得字符串相同
Every day a leetcode 题目来源:1247. 交换字符使得字符串相同 解法:贪心 由于要求交换次数尽量少,故: 本来相同位置就有相同的字符,不需要交换. 本来相同位置字符不同,需 ...
- 交换字符使得字符串相同[贪心]
贪心 前言 一.交换字符使得字符串相同 二.贪心 1.分析问题的思路过程 2.go 总结 参考资料 前言 贪心算法,必须先看清楚有哪些选择,才能在这些选择的基础上进行贪心,做最优选择,除此之外,还得看 ...
- leetcode1247. 交换字符使得字符串相同(贪心)
有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y",你需要通过「交换字符」的方式使这两个字符串相同. 每次「交换字符」的时候, ...
- LeetCode 1957. 删除字符使字符串变好
文章目录 1. 题目 2. 解题 1. 题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请 ...
- C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数
C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在C ...
- 5193. 删除字符使字符串变好
5193. 删除字符使字符串变好 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后 ...
- [剑指offer]面试题第[67]题[Leetcode][JAVA][第8题] 字符串转换整数 (atoi)[字符串]
[问题描述] 请你来实现一个 atoi 函数,使其能将字符串转换成整数.首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止.接下来的转化规则如下:如果第一个非空字符为正或者 ...
最新文章
- 后处理安装_你所不了解的国六后处理
- vue实现星级评价效果
- Windows 8操作技巧之快捷键大全
- java 内存指针_C指针和内存
- matlab 引号内变量,MATLAB 7.0 单引号内变量现实问题!
- Linux 重启php
- [数分提高]2014-2015-2第1教学周第2次课
- 学习动态性能表3----v$session_wait
- PowerDesigner中主键外键唯一键设置
- 使用threejs开发微信小游戏全过程
- linux下输入ls显示时间格式,【Linux基础】linux下修改ls显示的时间格式
- Library Genesis
- 学前端到了CSS阶段,你一定要掌握这9大防御式开发技能
- 用VC实现Html编辑器
- ENVI水体提取流程实践与问题
- html鼹鼠出现不重叠,洛谷 P2285 BZOJ 1207 [HNOI2004]打鼹鼠
- 高通退出服务器芯片市场,华为会跟随退出么?
- 周易之阿拉伯几何原本谭
- RNA 30. SCI文章中基于TCGA和GTEx数据挖掘神器(GEPIA2)
- 支付宝的下个千亿生意!揭秘阿里智能公交布局