スキルツリー


def solution(skill, skill_trees):
    answer = 0
    d = [False] * 26
    
    for sk in skill_trees:
        for i in range(1, len(skill)):
            index = ord(skill[i]) - ord('A')
            d[index] = True

        skill_index = 0
        flag = False

        for i in range(len(sk)):
            if d[ord(sk[i]) - ord('A')]:
                
                flag = True
                break
            if skill[skill_index] == sk[i]:
                skill_index+=1
                if skill_index >= len(skill): 
                    skill_index-=1
                    continue
                d[ord(skill[skill_index]) - ord('A')] = False
        if not flag:
            answer+=1
    return answer

問題の説明


1)巡回スキル配列のforゲートを作る.
2)dという名前の配列を作成し,先行スキルを持つスキルのみをTrueに設定する.
3)スキルインデックス変数を作成し、先行スキルの順序を格納します.
4)変数flagを作成し、最終的に1回違反したかどうかを確認します.
5)スキル配列中のスキルを1つずつ取り出してドアを回す.
6)現在使用している(学習する)スキルがTrueのままの場合、flagをTrueに変換して重複文を終了します.
7)現在使用されているスキルが先行スキルの1つ目であれば
8)ロースキルインデックスを増やし,増加したインデックス値に対応するd配列の値をFalseに変換する.
9)最終的な先行スキルを突破すれば,インデックスは追加されない.
10)最後にfor文を離れるとき,flagの値で答えを増やすか否かを決定する.

他人の解答


def solution(skill, skill_trees):
    answer = 0

    for skills in skill_trees:
        skill_list = list(skill)

        for s in skills:
            if s in skill:
                if s != skill_list.pop(0):
                    break
        else:
            answer += 1

    return answer

に感銘を与える


スキルの前置きリストをlistに入れ、最初と同じ場合はリリースし、次のリリース項目は自動的に次のスキルになります.
きれいに
どうせ初期化の時間は長くないので、この方法でいいです.
とても良いハーモニーです