893.特殊等价字符串组

给定一个字符串数组A,题目要求找出所有特殊等价字符串组。特殊等价字符串组是指数组中的每对字符串经过特定的字符交换操作后能够相互转换,并且该组已包含所有可能的特殊等价字符串。例如,'zzxy'和'xyzz'是一对特殊等价字符串。题解通过比较字符串的偶数位和奇数位字符排序后的组合来确定字符串是否特殊等价,并利用集合去重,从而计算出特殊等价字符串组的数量。
摘要由CSDN通过智能技术生成

你将得到一个字符串数组 A。
每次移动都可以交换 S 的任意两个偶数下标的字符或任意两个奇数下标的字符。
如果经过任意次数的移动,S == T,那么两个字符串 S 和 T 是 特殊等价 的。
例如,S = “zzxy” 和 T = “xyzz” 是一对特殊等价字符串,因为可以先交换 S[0] 和 S[2],然后交换 S[1] 和 S[3],使得 “zzxy” -> “xzzy” -> “xyzz” 。
现在规定,A 的 一组特殊等价字符串 就是 A 的一个同时满足下述条件的非空子集:
该组中的每一对字符串都是 特殊等价 的
该组字符串已经涵盖了该类别中的所有特殊等价字符串,容量达到理论上的最大值(也就是说,如果一个字符串不在该组中,那么这个字符串就 不会 与该组内任何字符串特殊等价)
返回 A 中特殊等价字符串组的数量。

示例 1:
输入:[“abcd”,“cdab”,“cbad”,“xyzz”,“zzxy”,“zzyx”]
输出:3
解释:其中一组为 [“abcd”, “cdab”, “cbad”],因为它们是成对的特殊等价字符串,且没有其他字符串与这些字符串特殊等价。
另外两组分别是 [“xyzz”, “zzxy”] 和 [“zzyx”]。特别需要注意的是,“zzxy” 不与 “zzyx” 特殊等价。

示例 2:
输入:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
输出:3
解释:3 组 [“abc”,“cba”],[“acb”,“bca”],[“bac”,“cab”]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/groups-of-special-equivalent-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# 若此字符串奇数位、偶数位所有字符串都等于彼字符串奇数位、偶数位所有字符串则这两字符串特殊等价,找出所有特殊等价字符串再去重即可
class Solution:
    def numSpecialEquivGroups(self, A: List[str]) -> int:
    	# i[::2]代表此字符串所有偶数位字符,sotred()是为了便于比较,i[1::2]代表此字符串所有奇数位字符
        return len(set("".join(sorted(i[::2]) + sorted(i[1::2])) for i in A))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值