题解 | 小红的回文串

小红的回文串

https://www.nowcoder.com/practice/b0c3a7aecb0a47ab865602585f4402a7

#include <iostream>
using namespace std;

void solve()
{
    string s;cin>>s;
    int l=0,r=s.size()-1;
    while(l<=r)
    {
        if(s[l]==s[r]) l++,r--; //普通情况
        //w=w=vv
        //m=nn=uu=nu=un
        else if((s[l]=='w'&&s[r]=='v'&&s[r-1]=='v')||
                (s[l]=='m'&&s[r]=='n'&&s[r-1]=='n')||
                (s[l]=='m'&&s[r]=='u'&&s[r-1]=='n')||
                (s[l]=='m'&&s[r]=='n'&&s[r-1]=='u')||
                (s[l]=='m'&&s[r]=='u'&&s[r-1]=='u'))
        l++,r-=2;
        else if((s[r]=='w'&&s[l]=='v'&&s[l+1]=='v')||
                (s[r]=='m'&&s[l]=='n'&&s[l+1]=='n')||
                (s[r]=='m'&&s[l]=='u'&&s[l+1]=='n')||
                (s[r]=='m'&&s[l]=='n'&&s[l+1]=='u')||
                (s[r]=='m'&&s[l]=='u'&&s[l+1]=='u'))
        l+=2,r--;
        //d=q=p=b
        else if((((s[l]=='d'||s[l]=='q'||s[l]=='p'||s[l]=='b'))&&
                (s[r]=='d'||s[r]=='q'||s[r]=='p'||s[r]=='b')))
        l++,r--;
        //n=u
        else if((s[l]=='n'&&s[r]=='u')||
                (s[r]=='n'&&s[l]=='u'))
        l++,r--;
        else {cout<<"NO\n";return;}
    }
    cout<<"YES\n";
}


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

全部评论
有bug,mn拆成nnn是回文的,应该输出yes,你这个只是匹配m和nn,会输出no,正解应该先把所有的m和w都拆开,之后再双指针遍历
点赞 回复 分享
发布于 2025-12-31 17:52 江西

相关推荐

03-12 12:33
嘉应学院 Python
堆肥大王:认可你的做法,但无产阶级的兄弟们也希望你能过的更好
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务