只要分三种情况:
所有字母都一样 头尾字母一样,中间有不一样的 头尾不一样 flagflag是用来判断是否所有都一样的(TrueTrue为一样
FalseFalse为不一样)如果头尾一样,乘法原理:(头+1)×(尾+1)(加一是因为可以全部去掉)
如果不一样,加法原理:头+尾+1 ,要么全去头,要么全去尾,(可以空串再加一)
最后边忘了MODMOD
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD=998244353;
ll n;
string str;
int main(){
cin >> n ;
cin >> str;
bool flag = 1;
ll c1 = 1, c2 = 1;
//记录前面相同个数
for(int i = 1; i < n ; i++){
if(str[i-1] == str[i]) c1 ++;
else{
flag = 0;
break;
}
}
if(flag){
cout << ((n+1)*n/2)%MOD << endl;
return 0;
}
//记录后面相同个数,不满足flag后面必然至少一个不同
for(int i = n - 2; i > 0 ;--i ){
if(str[i] == str[i+1]) c2 ++;
else break;
}
if(str[0] == str[n-1]) cout << ((ll)(c1 + 1) * (ll) (c2+1))%MOD << endl;
else cout << ((ll)c1+(ll)c2+(ll)1)%MOD << endl;
return 0;
}