839 相似字串組

2021-10-18 13:15:58 字數 2089 閱讀 4382

如果交換字串 x 中的兩個不同位置的字母,使得它和字串 y 相等,那麼稱 x 和 y

兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。

例如,「tars」 和 「rats」 是相似的 (交換 0 與 2 的位置); 「rats」 和 「arts」 也是相似的,但是

「star」 不與 「tars」,「rats」,或 「arts」 相似。

總之,它們通過相似性形成了兩個關聯組: 和 。注意,「tars」 和

「arts」 是在同一組中,即使它們並不相似。形式上,對每個組而言,要確定乙個單詞在組中,只需要這個詞和該組中至少乙個單詞相似。

給你乙個字串列表 strs。列表中的每個字串都是 strs 中其它所有字串的乙個字母異位詞。請問 strs 中有多少個相似字串組?

示例 1:

輸入:strs = [「tars」,「rats」,「arts」,「star」] 輸出:2 示例 2:

輸入:strs = [「omv」,「ovm」] 輸出:1

平平無奇並查集

如何判斷相似:

怎樣用並查集:

中等難度把,配不上困難。

classuf:

def__init__

(self, n)

: self.pre =

list

(range

(n))

self.sz =[1

]* n

self.count = n # 當前連通分量的數目

deffind

(self, x)

:while x != self.pre[x]

: self.pre[x]

= self.pre[self.pre[x]

] x = self.pre[x]

return x

defunion

(self, fx, fy)

:if self.pre[fx]

< self.pre[fy]

: fx, fy = fy, fx

self.pre[fy]

= self.pre[fx]

self.sz[fx]

+= self.sz[fy]

self.count -=

1class

solution

:def

numsimilargroups

(self, strs: list[

str])-

>

int:

defissimilar

(s1, s2):if

len(s1)

!=len

(s2)

:return

false

if s1 == s2:

return

true

count1, count2 =

,[] different =

0for i in

range

(len

(s1)):

if s1[i]

!= s2[i]

: different +=

1return

true

if different ==

2else

false

n =len(strs)

uf = uf(n)

for i in

range

(n):

for j in

range

(i+1

, n)

:if issimilar(strs[i]

, strs[j]):

fx, fy = uf.find(i)

, uf.find(j)

if fx != fy:

uf.union(fx, fy)

return uf.count

839 相似字串組

839.相似字串組 如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts ...

839 相似字串組

難度困難93 如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts 相似。...

839 相似字串組

如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts 相似。總之,它們通過...