【題目】
給定兩個字串str1和str2,如果str1和str2**現的字元種類一樣且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。
請實現函式判斷兩個字串是否互為變形詞。
是變形詞返回true,不是變形詞返回false。
【舉例】
str1=「123」,str2=「231」,返回true。
str1=「123」,str2=「2331」,返回false。
統計字串str1的種類及數量,再與str2進行對比。
比較字串長度,長度不同,則返回false;
統計str1,字元及對應數量遞增;
對比str2,字元及對應數量遞減;
對比過程中,發現字元種類不存在或者數量遞減至負數,則返回false;
對比完成,兩者字串長度相同,又不存在字元種類不同及數量不對齊情況,則說明兩者互為變形詞,返回true。
若字串只包含ascii字元,可建立長度為256的陣列統計其數量(索引為字元在ascii上對應的編碼),見is_deformed_ascii_str(s1, s2)
;
若字串包含廣義unicode字元,可建立雜湊表(python對應實現為字典),儲存鍵值對(字元種類——數量),見is_deformed_str(s1, s2)
。
# 判斷兩個由ascii字元構成的字串是否互為變形詞
defis_deformed_ascii_str
(s1, s2):if
len(s1)==0
orlen
(s2)==0
orlen
(s1)
!=len
(s2)
:return
false
arr =[0
for i in
range
(256)]
for i in
range
(len
(s1)):
arr[
ord(s1[i])]
+=1for i in
range
(len
(s2)):
arr[
ord(s2[i])]
-=1if arr[
ord(s2[i])]
<0:
return
false
return
true
# 判斷兩個字串是否互為變形詞
defis_deformed_str
(s1, s2):if
len(s1)==0
orlen
(s2)==0
orlen
(s1)
!=len
(s2)
:return
false
d =# 字元-次數 字典
for i in
range
(len
(s1)):
d[s1[i]
]= d.get(s1[i],0
)+1for i in
range
(len
(s2)):
d[s2[i]
]= d.get(s2[i],0
)-1if d[s2[i]
]<0:
return
false
return
true
# 簡單測試
if __name__ ==
'__main__'
:print
(is_deformed_ascii_str(
'123'
,'231'))
# true
print
(is_deformed_ascii_str(
'123'
,'2331'))
# false
print
(is_deformed_ascii_str(
'1231'
,'2131'))
# true
print
(is_deformed_str(
'123'
,'231'))
# true
print
(is_deformed_str(
'123'
,'2331'))
# false
print
(is_deformed_str(
'1231'
,'2131'))
# true
判斷兩個字串是否互為變形詞
題目 給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣且每種字元出現的次數也一樣,則str1和str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。舉例 str1 123 str2 231 返回true str1 123 str2 2331 返回false。難度 inc...
判斷兩個字串是否互為變形詞
給定兩個字串s1,s2,如果s1,s2 現的字元種類一樣且每種字元出現的次數一樣,則s1,s2互為變形詞。判斷s1,s2是否為變形詞。如遍歷s1,統計每個字元個數,遍歷s2,每個字元,s1字元個數統計對應字元 1,若減到負數,說明個數不匹配,返回false。遍歷完成則返回true from coll...
判斷兩個字串是否互為變形詞
描述 給定兩個字串 str1 和str2 如果兩個字串 現的字元種類一樣,次數也一樣,則互為變形詞,實現乙個函式判斷兩個字串是否互為變形詞。例如 str1 123 str2 132 true str1 123 str2 1332 false public boolean isde string st...