题解:SP2426 PLD - Palindromes

· · 题解

传送门。

题目分析:

这是一道暴力题,可是如果我们一个一个来判断时就会超时,所以我们可以考虑两边同时判断,所以我们可以使用双指针从开头和末尾来遍历,如果两个指针指向的字母不同就说明这个就不是回文串。
例如:当我们判断 \texttt{abca} 是不是回文串是我们可以用 l 指向开头,r 指向末尾,相同就 l+1r-1 判断下一组。当 l 指向 br 指向 c 时。我们发现 l \ne r,所以字符串 \texttt{abca} 不是回文串。
代码如下:

#include<bits/stdc++.h>
using namespace std;
int k,ans;
string s;
int main(){
    cin>>k>>s;
    for(int i=0;i<s.size()-k+1;i++){
        int l=i,r=i+k-1,f=1;
        while(l<=r){//双指针。
            if(s[l]!=s[r]){//如果两边不一样说明这个不是回文串。
                f=0;
                break;//直接退出循环。
            }
            l++,r--;
        }
        if(f)ans++;//如果为回文串就ans++。
    }
    cout<<ans;//输出答案。
    return 0;//华丽的结束。
}