题解 | 宝石手串

宝石手串

https://www.nowcoder.com/practice/9648c918da794be28575dd121efa1c50


import sys

def try_to_break(num,string):
    pos_idx_dict={}
    min_step=float('inf')
    # 遍历存字典,同时检查顺序相邻
    for i in range(num):
        if string[i] not in pos_idx_dict:
            pos_idx_dict[string[i]]=[i]
        else:
            step=i-pos_idx_dict[string[i]][-1]-1
            min_step=min(step,min_step)
            pos_idx_dict[string[i]].append(i)
    # 遍历检查字典,只看首尾情况
    for value in pos_idx_dict.values():
        if len(value)>=2:
            left=min(value)
            right=max(value)
            step=num-1-right+left
            min_step=min(min_step,step)
    
    # 输出
    if min_step==float('inf'):
        return -1
    elif min_step==0:
        return 0
    else:
        return min_step

def main():
    T=int(input())

    for i in range(T):
        n=int(input())
        s=input()
        print(try_to_break(n,s))


if __name__=='__main__':
    main()

全部评论

相关推荐

09-12 11:55
已编辑
湖南工商大学 Java
那一天的Java_J...:这种一堆问题的,别去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务