题解 | 宝石手串
宝石手串
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()