[アルゴリズム回答]プログラマ-ニュースクラスタ


に答える

  • に入力された文字列を2文字切断し、文字であるかどうかを確認します.
  • 合、交差を求めます.
  • ワードカード類似度を計算します.
  • コード#コード#

    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)は、和集、交差を求めることができる.ただし、この問題では複数の集約が許可されているため、この方法はすべての重複値を除去するのに適していません.