宝石手串
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红有一个 n 颗宝石构成的环形宝石手串,即第一和最后一宝石相连,其中第 i 个宝石的属性为 s_i ;若两个宝石的属性相同,那么这两个宝石会相互排斥,导致断开。
\hspace{15pt}小红可以从手串中摘掉一些宝石,每次摘掉后,这个宝石左右的两个宝石会相接,手串依旧是环形。
\hspace{15pt}小红想要破坏这个手串。她想要知道,最少还需要摘掉多少个宝石才会导致手串断开。特别的,当手串上剩余的宝石数量恰好为 2 而依旧没能断开时,视为破坏失败,直接输出 -1

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 100\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入一个整数 n \left( 2 \leqq n \leqq 10^5 \right) 代表手串初始的宝石数量。
\hspace{15pt}第二行输入一个长度为 n 、仅由小写字母构成的字符串,代表手串上每个宝石的属性。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 10^5

输出描述:

\hspace{15pt}对于每一组测试数据,如果手环无法破坏,直接输出 -1 ;否则,在一行上输出一个整数,代表手串断开需要的最少操作次数。
示例1

输入

复制
2
2
ac
3
aac

输出

复制
-1
0