zoukankan      html  css  js  c++  java
  • 算法35---特殊等价字符串组

    1、题目:

    你将得到一个字符串数组 A

    如果经过任意次数的移动,S == T,那么两个字符串 ST特殊等价的。

    一次移动包括选择两个索引 ij,且 i%2 == j%2,并且交换 S[j]S [i]

    现在规定,A 中的特殊等价字符串组A 的非空子集 S,这样不在 S 中的任何字符串与 S 中的任何字符串都不是特殊等价的。

    返回 A 中特殊等价字符串组的数量。

    示例 1:

    输入:["a","b","c","a","c","c"]
    输出:3
    解释:3组 ["a","a"],["b"],["c","c","c"]
    

    示例 2:

    输入:["aa","bb","ab","ba"]
    输出:4
    解释:4 组 ["aa"],["bb"],["ab"],["ba"]
    

    示例 3:

    输入:["abc","acb","bac","bca","cab","cba"]
    输出:3
    解释:3 组 ["abc","cba"],["acb","bca"],["bac","cab"]
    

    示例 4:

    输入:["abcd","cdab","adcb","cbad"]
    输出:1
    解释:1 组 ["abcd","cdab","adcb","cbad"]
    

    提示:

    • 1 <= A.length <= 1000
    • 1 <= A[i].length <= 20
    • 所有 A[i] 都具有相同的长度。
    • 所有 A[i] 都只由小写字母组成。

    2、思路:

    将 每个字符串中:索引为【0,2,4,……,】【1,3,5,……】的拿出来sort一下,再拼起来,放进set,最后看set的数量。

    时间复杂度:n

    空间复杂度:n

    3、代码:

        def numSpecialEquivGroups(self, A):
            """
            :type A: List[str]
            :rtype: int
            """
            B = set()
            for string in A:
                C = list(string)
                a, b = C[::2], C[1::2]
                B.add((''.join(sorted(a)), ''.join(sorted(b))))
                
            return len(B)

    #一行代码:return len(set("".join(sorted(s[0::2])) + "".join(sorted(s[1::2])) for s in A))
  • 相关阅读:
    无监督学习
    监督学习
    cmd
    oj1026
    oj1025
    使用虚函数的不同模式
    hdu1166:敌兵布阵(树状数组或线段树)
    传纸条(动态规划)
    SDUT 1266 出栈序列统计(卡特兰数)
    HDU 5063 Operation the Sequence
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/9660437.html
Copyright © 2011-2022 走看看