Algorithm電話番号リスト


ソース:プログラマコードテスト練習電話リスト

電話番号リスト



私の答え

from itertools import combinations
import re

def solution(phone_book):
    for i in combinations(phone_book, 2):
        if re.match("^"+i[0], i[1]) or re.match("^"+i[1], i[0]):
            return False
    return True
これは、正規表現およびitertoolscombinationsを使用する方法である.実際,これは時間の複雑さのため,効率面で無理に通過した回答である.簡単そうに見えますが、見た目もよくありません.

他人の解答

def solution(phone_book):
    answer = True
    hash_map = {}
    for phone_number in phone_book:
        hash_map[phone_number] = 1
    for phone_number in phone_book:
        temp = ""
        for number in phone_number:
            temp += number
            if temp in hash_map and temp != phone_number:
                answer = False
    return answer
これは慣例に従って解いた答えがもたらした答えです.これはハッシュカテゴリに分類された問題であり,ハッシュ解答を利用した答えである.dictionaryを利用するのは、dictionaryがハッシュ値を利用した資料構造であるからである.まずphone_bookdictionary形態に変換し,ハッシュテーブルにより参照する.この場合、list等の資料構造を参照した場合よりも速い速度で参照することができる.