zoukankan      html  css  js  c++  java
  • leetcode1247

     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按字符进行判断,分三种情况讨论:

    s1是x,s2是y的情况,记录为数量type1

    s1是y,s2是x的情况,记录为数量type2

    s1与s2同是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"形式。

  • 相关阅读:
    队列 和 线程 之GCD dispatch
    ios NSUserDefaults存储数据(偏好设置)
    Binary Tree postorder Traversal
    Binary Tree Inorder Traversal
    Binary Tree Preorder Traversal
    Rotate List
    Reversed Linked List(Reverse a singly linked list)
    Remove Element
    Swap Nodes in Pairs
    Add Two Numbers
  • 原文地址:https://www.cnblogs.com/asenyang/p/11787612.html
Copyright © 2011-2022 走看看