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))
  • 相关阅读:
    oracle之数据限定与排序
    oracle之分组函数
    oracle之SQL的数据类型
    lftp简单使用
    黑盘-蓝盘-绿盘-红盘
    windows 路由
    http扩展请求头中的x-Forwarded-For
    http状态码304
    firewall 实现数据的端口转发
    通过curl获取网页访问时间
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/9660437.html
Copyright © 2011-2022 走看看