跳转至

A. Same Difference

时间限制:每测试点 1 秒
内存限制:256 MB

问题描述

给定一个长度为 n 的字符串 s,由小写字母组成。

在一次操作中,你可以选择一个整数 i1 \leq i < n),并将 s_i 改为 s_{i+1}

最少需要多少次操作才能使所有字符相同?可以证明这总是可以实现的。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数量 t1 \leq t \leq 20)。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 n2 \leq n \leq 100)—— 字符串的长度。

接下来一行包含一个长度为 n 的字符串 s,由小写字母组成。

保证所有测试用例的 n 之和不超过 100

输出格式

对于每个测试用例,输出一个整数 —— 使所有字符相同所需的最少操作次数。

样例输入

5
3
qwq
2
aa
4
test
5
abbac
6
abcabc

样例输出

1
0
2
4
4

样例说明

  • 第一个测试用例中,可以通过 1 次操作将 s_2 改为 s_3 达成目标。
  • 第三个测试用例中,可以先将 s_3 改为 s_4,再将 s_2 改为 s_3,总共使用 2 次操作。可以证明答案不小于 2。

赛时AC代码

// Problem: CF 2166 A
// Contest: Codeforces - Codeforces Round 1064 (Div. 2)
// URL: https://codeforces.com/contest/2166/problem/A
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//39

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;

void solve(){
    int n;
    cin>>n;
    string s;
    cin>>s;
    vector<int> cnt(300,0); 
    for(int i=0;i<n;i++){
        cnt[s[i]-'a']++;
    }
    printf("%d\n",n-cnt[s[n-1]-'a']);

    return ;
}



int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}