zoukankan      html  css  js  c++  java
  • 【leetcode】1247. Minimum Swaps to Make Strings Equal

    题目如下:

    You are given two strings s1 and s2 of equal length consisting of letters "x" and "y" only. Your task is to make these two strings equal to each other. You can swap any two characters that belong to different strings, which means: swap s1[i] and s2[j].

    Return the minimum number of swaps required to make s1 and s2 equal, or return -1 if it is impossible to do so. 

    Example 1:

    Input: s1 = "xx", s2 = "yy"
    Output: 1
    Explanation: 
    Swap s1[0] and s2[1], s1 = "yx", s2 = "yx".

    Example 2: 

    Input: s1 = "xy", s2 = "yx"
    Output: 2
    Explanation: 
    Swap s1[0] and s2[0], s1 = "yy", s2 = "xx".
    Swap s1[0] and s2[1], s1 = "xy", s2 = "xy".
    Note that you can't swap s1[0] and s1[1] to make s1 equal to "yx", cause we can only swap chars in different strings.

    Example 3:

    Input: s1 = "xx", s2 = "xy"
    Output: -1
    

    Example 4:

    Input: s1 = "xxyyxyxyxx", s2 = "xyyxyxxxyx"
    Output: 4

    Constraints:

    • 1 <= s1.length, s2.length <= 1000
    • s1, s2 only contain 'x' or 'y'.

    解题思路:这个题目还是有点考巧劲的。如果s1[i] != s2[i],只有这两种取值 s1[i] = x,s2[i] = y(记为xy)和s1[i] = y,s2[i] = x(记为yx)。理想情况下,进行s1[i]和s2[j]的交换,使得s1[i] = s2[i] 与 s1[j] = s2[j]同时成立,那么一定是交换次数最少的场景。而题目中例子1的交换则符合这个场景,只要分别求出(xy)和(yx)的个数,然后分别进行(xy)和(yx)的组内交换,剩余的配对再进行例子2的组间交换,即可求得最小的交换次数。

    代码如下:

    class Solution(object):
        def minimumSwap(self, s1, s2):
            """
            :type s1: str
            :type s2: str
            :rtype: int
            """
            dic = {}
            dic[('x','y')] = 0
            dic[('y','x')] = 0
    
            for (i,j) in zip(s1,s2):
                if i != j:
                    dic[(i,j)]  += 1
            if (dic[('x','y')] + dic[('y','x')] ) % 2 != 0:
                return -1
            elif dic[('x','y')] % 2 == 0 and dic[('y','x')] % 2 == 0:
                return dic[('x','y')] / 2  + dic[('y','x')] / 2
            return dic[('x','y')] / 2  + dic[('y','x')] / 2 + 2
  • 相关阅读:
    批处理 bat 查询局域网内在线电脑IP
    svn忽略不需要同步的文件夹或文件
    脚本设置IP bat 命令行设置自动获取IP和固定IP
    Lua中使用状态机FSM简单例子
    Lua 数组排序 table.sort的注意事项
    lua中怎么替换掉字符串中的$^特殊字符?
    C#应用程序隐藏调用bat脚本
    Oracle 基础教程
    Python编程
    利用Python进行数据分析(九)NumPy高级应用
  • 原文地址:https://www.cnblogs.com/seyjs/p/11790664.html
Copyright © 2011-2022 走看看