假设我们有一个称为A的字符串数组。向S的一个移动包括交换S的任何两个偶数索引字符或S的任何两个奇数索引字符。
现在,如果在对S进行任意移动之后,两个字符串S和T是特殊等价的,那么S与T相同。因此,如果S =“ zzxy”和T =“ xyzz”是特殊等价的,因为我们可以进行移动如“ zzxy”到“ xzzy”到“ xyzz”,依次交换S [0]和S [2],然后交换S [1]和S [3]。
现在,来自A的一组特殊等效字符串是A的非空子集,使得-
该组中的每对字符串中都有一个特殊的等价字符串,并且该组是可能的最大大小(该组中没有字符串S,因此S等于该组中的每个字符串都特别)。我们必须找到数字来自A的一组特殊等效字符串
因此,如果输入类似于[“ abcd”,“ cdab”,“ cbad”,“ xyzz”,“ zzxy”,“ zzyx”],则输出将为3,因为一组是[“ abcd”,“ cdab“,” cbad“],因为它们都是成对的特殊对等,其他所有字符串都不是成对的特殊对等。还有另外两个小组。它们是[“ xyzz”,“ zzxy”]和[“ zzyx”]。
为了解决这个问题,我们将遵循以下步骤-
代码:=新集
对于A中的每个单词,
代码:=连接两个带偶数位置索引的字符串和另一个带奇数位置索引的字符串
将代码添加到代码中
代码的返回大小
让我们看下面的实现以更好地理解-
class Solution: def numSpecialEquivGroups(self, A): codes = set() for word in A: code = ''.join(sorted(word[::2])) +''.join(sorted(word[1::2])) codes.add(code) return len(codes) ob = Solution() print(ob.numSpecialEquivGroups(["abcd","cdab","cbad","xyzz","zzxy","z zyx"]))
["abcd","cdab","cbad","xyzz","zzxy","zzyx"]
输出结果
3