给一个长度为 \(n\) 的字符串 \(s\) 。给定一个正整数 \(k\) 。询问 \(s\) 能否等于 \(a_1 + a_2 + \cdots + a_k + a_{k + 1} + R(a_k) + R(a_{k - 1}) + \cdots + R(a_{1})\) 。
其中 \(a_i\) 代表一个非空字符串, \(R(a_i)\) 代表 \(a_i\) 的 \(reverse\) 。
由于 \(a_{k + 1}\) 需要是非空,让指针 \(i\) 扫到 \(\lceil \frac{n}{2} \rceil - 1\) 的位置。
如果 \(s_{i} = s_{n + 1 - i}\) 则指针继续右移, \(cnt += 1\) 。否则 \(break\) 结束扫描。
若 \(cnt \geq k\) 则可以分出 \(k\) 个非空字符串,否则不能。
view
#include <bits/stdc++.h>
void solve(){
int n, k; std::cin >> n >> k;
std::string s; std::cin >> s; s = " " + s;
int cnt = 0;
for (int i = 1; i < (n + 1) / 2; i++) {
if (s[i] == s[n + 1 - i]) cnt++;
else break;
}
std::cout << (k <= cnt ? "YES" : "NO") << '\n';
}
int main() {
int _ = 1; std::cin >> _;
while (_--) {solve();}
return 0;
}