[アルゴリズム回答]プログラマ-ニュースクラスタ
7521 ワード
に答える
コード#コード#
from collections import Counter
def solution(str1:str , str2: str) -> int:
sList1 = [str1[i:i+2].lower() for i in range(len(str1)-1) if str1[i:i+2].isalpha()]
sList2 = [str2[i:i+2].lower() for i in range(len(str2)-1) if str2[i:i+2].isalpha()]
Counter1 = Counter(sList1)
Counter2 = Counter(sList2)
inter = list((Counter1 & Counter2).elements())
union = list((Counter1 | Counter2).elements())
return 65536 if len(sList1) == 0 and len(sList2) == 0 else int(len(inter) / len(union) * 65536)
print(solution('FRANCE', 'french'))
print(solution('handshake', 'shake hands'))
print(solution('aa1+aa2', 'AAAA12'))
print(solution('E=M*C^2', 'e=m*c^2'))
新知
isalpha():文字列であるかどうかを確認し、True/Felseを返します.中にアルファベット以外の数字やスペースがある場合はFalseを返します
->最初は、アルファベットかどうかを正規表現で判断しようとしました.ただし、isalpha()を使うと、正規表現を使わなくても文字の有無を非常に簡単に判断できます!同様にisdigit()、isalnum()があり、参照できます.
交差/並列を求める
(1)Counter():
->Counter()は、文字をキーとし、文字の個数を値としてdictionaryをパラメータとして渡す文字列を返す関数です.ディクショナリを拡張しているため、すべてのディクショナリAPIを使用して集約構造を生成できます.上記のコードでは,ディクソン形式の要素値(key)値のみが必要であるため,elements()のみを用いて要素を抽出した.
(2)setの使い方:
->
set(sList1) & set(sList2)
、set(sList1) | set(sList2)
は、和集、交差を求めることができる.ただし、この問題では複数の集約が許可されているため、この方法はすべての重複値を除去するのに適していません.Reference
この問題について([アルゴリズム回答]プログラマ-ニュースクラスタ), 我々は、より多くの情報をここで見つけました https://velog.io/@newdana01/알고리즘-문제풀이-프로그래머스-뉴스-클러스터링テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol