アルゴリズム雑記
3411 ワード
前に面接問題に遭遇しましたが、2つの文字列(文字列は小文字のみで構成されている)が完全に同じ文字列であるかどうかを判断する.例えば文字列1:staff文字列2:fastfが条件を満たしている.当時『The-ART-Of-Programming-by-July』を見た中にはa,b,c,dの素数置換法が紹介されています.zを素数2,3,5,7に置き換える...2つの文字列の素数の積をそれぞれ求め、等しいかどうかを比較すればよい.
当時は簡単に思いついたのですが、後で思い出してみればそれで済むのですが、乗積オーバーフローに直面しやすい状況で今日は『プログラミング珠玉』を見て、文字列1:staff対応署名をa 1 f 2 s 1 t 1文字列2対応署名をa 1 f 2 s 1 t 1と比較して判断できる署名法を紹介しました
確かに良いアルゴリズムです
転載先:https://www.cnblogs.com/nixiaocang/p/6487203.html
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def get_res(string):
bag = {
'a':2,
'b':3,
...
'z':101
}
res = 1
for i in string:
res = res * bag[i]
return res
def same_char(str1, str2):
res1 = get_res(str1)
res2 = get_res(str2)
return res1 == res2
当時は簡単に思いついたのですが、後で思い出してみればそれで済むのですが、乗積オーバーフローに直面しやすい状況で今日は『プログラミング珠玉』を見て、文字列1:staff対応署名をa 1 f 2 s 1 t 1文字列2対応署名をa 1 f 2 s 1 t 1と比較して判断できる署名法を紹介しました
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def get_sign(string):
bag={}
for i in string:
if i in bag.keys():
bag[i] += 1
else:
bag[i] = 1
res = ""
for k in sorted(bag):
res +='%s%s'%(k, bag[k])
return res
def same_char(str1, str2):
res1 = get_sign(str1)
res2 = get_sign(str2)
return res1 == res2
確かに良いアルゴリズムです
転載先:https://www.cnblogs.com/nixiaocang/p/6487203.html