[アルゴリズム]電話番号リスト
4060 ワード
1.質問
2.私の解答(失敗)
def solution(phone_book):
phone_book = [ i[0:2] for i in phone_book ]
phone_book.sort()
for i in range(len(phone_book)-1) :
if phone_book[i] == phone_book[i+1] : return False
return True
異常に3をテストし、11で失敗したソースコードをテストします.ソースコードを簡単に説明すると、文字列の最初の2つをリストに保存し、
set()
を使用して重複を解消し、2つの長さを比較し、同じ接頭辞が存在しないと判断し、同じ場合は接頭辞が存在し、false
を返します.問題を誤って理解するのはたいへん大きい.1つの電話番号は別の電話番号の接頭辞であるべきで、これは1つの電話番号が別の電話番号の先頭に属するべきであることを意味し、
[0:2]
のように線を引くとデータが破損し、正確な比較ができない.3.他人の回答
def solution(phone_book):
phone_book.sort()
for p1, p2 in zip(phone_book, phone_book[1:]):
if p2.startswith(p1):
return False
return True
より簡潔なアルゴリズム.すべての電話番号を比較しないで、sortの後でzipを使って2つの隣接する電話番号だけを比較します.この場合、startswithを使用して、2つの電話番号が接頭辞であるかどうかを比較します.4.勉強するところ
Reference
この問題について([アルゴリズム]電話番号リスト), 我々は、より多くの情報をここで見つけました https://velog.io/@joi0104/알고리즘-전화번호-목록テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol