[Algorithm🧬] 新しいIDの推奨


質問リンク / 答えを出す。py , 答えを出す。swift
第3段階と第4段階でindexerrorが現れたときは本当に散らかっていました...開始...この2回現れたら、中間文字列の長さが変わるので、次のように削除をチェックします.もちろん.インデックスエラーが発生しました.
# step 3
for i in range(len(answer)-1):
    if answer[i] == "." and answer[i + 1] == ".":
    	answer.pop(i)
だから.このオーバーラップ部分の最初のindexのみを保存し、その後popをしました...エラーはありませんが、前の削除、後のインデックスが変わったので、変な答えが出てきました.
# step 3
indexs = []
for i in range(len(answer)-1):
    if answer[i] == "." and answer[i + 1] == ".":
    	indexs.append(i)

for i in range(len(indexs)):
	answer.pop(i);
では!!indexs配列を裏返して、後ろから削除すればいい!!コードを書きたいのですが...じゃ、後ろからでいいんじゃないですか.以下のコードを記述した.

フェーズ6も...0文字または1文字の問題が発生しました.もう一度解決しなければならない問題のようです.他の人の答えを見ると正規表現が上手です.それも考えてみよう.私はCの編成方式から抜け出すことができないようだ.
def solution(new_id):
    answer = []

    # step 1
    new_id = new_id.lower()

    # print(answer)

    # step 2
    for i in range(len(new_id)):
        c = new_id[i]
        if c.isdecimal() or c.isalpha() or c == "-" or c == "_" or c == ".":
            answer.append(c)

    # print(answer)

    # step 3
    start = len(answer) - 1
    for i in range(start, 0, -1):
        if answer[i] == "." and answer[i - 1] == ".":
            answer.pop(i)

    # print(answer)


    # step 4
    if len(answer) > 1:
        if answer[0] == ".":
            answer.pop(0)
        if answer[-1] == ".":
            answer.pop()
    elif len(answer) == 1:
        if answer[0] == ".":
            answer.pop()

    # print(answer)

    # step 5
    if len(answer) == 0:
        answer.append("a")

    # print(answer)

    # step 6
    if len(answer) > 15:
        answer = answer[:15]
        if answer[-1] == ".":
            answer.pop()

    # print(answer)

    # step 7
    last_c = answer[-1]
    while len(answer) < 3:
        answer += last_c

    # print(answer)

    answer = ''.join(str(c) for c in answer)
    return answer