首页 > 其他 > 详细

leetcode1247

时间:2019-11-03 16:31:27      阅读:164      评论:0      收藏:0      [点我收藏+]
 1 class Solution:
 2     def minimumSwap(self, s1: str, s2: str) -> int:
 3         type1,type2 = 0,0
 4         n = len(s1)
 5         for i in range(n):
 6             if s1[i] == x and s2[i] == y:
 7                 type1 += 1
 8             elif s1[i] == y and s2[i] == x:
 9                 type2 += 1
10         d1,r1 = type1 // 2,type1 % 2
11         d2,r2 = type2 // 2,type2 % 2
12         if r1 + r2 == 1:
13             return -1
14         else:
15             return d1 + d2 + r1 + r2

这是一道数学计算题目,将s1和s2按字符进行判断,分三种情况讨论:

上面是x下面是y的情况,记录为数量type1

上面是y下面是x的情况,记录为数量type2

上下同是x或同是y的情况,忽略,不用处理

对于type1,可以进行(type1 // 2) * 1 次交换,使对应位置都变为一样的字符,对应"xx"与"yy"形式。

对于type2,可以进行(type2 // 2) * 1次交换,使对应位置都变为一样的字符,对应"yy"与"xx"形式。

那剩下的两个余数type1 % 2与type2 % 2,如果一个是1,一个是0,那么说明最后无法交换(x和y的数量不匹配),返回-1。

否则,两个都是0,无需再进行交换;两个都是1,则再进行2次交换,对应"xy"与"yx"形式。

 

leetcode1247

原文:https://www.cnblogs.com/asenyang/p/11787612.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!