小洛的字符串分割-题解

描述

对于一个字符串 S,小洛定义它为 回文 的,当且仅当字符串 S 从左往右读和从右往左读一样,例如 abcba 是回文的,而 abcca 不是。

小洛现在有一个字符串 S,他想将这个字符串分为若干段,段长度分别为 1,2,3,…。具体而言,他会先将第一个字符拿出来作为字符串 S
1

,再将第 2,3 个字符拿出来作为 S
2

,再将第 4,5,6 个字符拿出来作为 S
3

,以此类推……最后若还有多余的字符,则单独作为一段。

例如说,对于字符串 aaababcaacd,会被分为如下的五个字符串:

S
1

=a;
S
2

=aa;
S
3

=bab;
S
4

=caac;
S
5

=d;
字符串 aaababcaacd 分割出的 5 个字符串都是回文的。

小洛想要知道,对于读入的字符串 S,这些被分割出来的字符串,有多少个是回文的呢?

输入描述

输入一行,一个字符串 S。

输出描述

输出一个整数,表示答案。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <bits/stdc++.h>
using namespace std;

int main() {
string in;
cin >> in;
int n = in.size();
int s = 0;
int k = 1;
int ans = 0;
while (s < n) {
int l = min(k, n - s);
bool huiwenshu = true;
for (int i = 0; i < l / 2; i++) {
if (in[s + i] != in[s + l - 1 - i]) {
huiwenshu = false;
break;
}
}
if (huiwenshu) {
ans++;
}
s += l;
k++;
}
cout << ans;
return 0;
}

小洛的字符串分割-题解
https://chenxi-tijie.pages.dev/2025/07/小洛的字符串分割-题解/
作者
chenxi
发布于
2025年7月5日
许可协议