const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const tokens: string[] = []; rl.on('line', function (line) { tokens.push(line.trim()) }); rl.on('close', function () { for (let i = 2, len = tokens.length; i < len; i += 2) { // 存储字母出现位置,key 是字母,value 是位置数组 const map = new Map<string, number[]>(); let ans = -1, minOps = Number.MAX_VALUE; for (let j = 0, sLen = tokens[i].length; j < sLen; ++j) { if(!map.has(tokens[i][j])){ map.set(tokens[i][j], [j]); } else { const target = map.get(tokens[i][j]); // 由于手串是环形的,关键在于对比最近相同字母按顺序到达更近,还是从尾部到达第一个相同字母更近 ans = minOps = Math.min(minOps, j - target[target.length - 1] - 1, sLen - j - 1 + target[0]); target.push(j); } } console.log(ans); } });