在处理回文序列时,可以想到使用双指针,尤其对于本题中'm'可以拆解为两个'v'的设定情境。

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int t,l,r,flag;
    string s;
    cin>>t;
    for(int i=0;i<t;i++){
        flag=0;
        cin>>s;
        l=0;r=s.size()-1;
        while(l<r){
            if(s[l]==s[r]){ l++; r--; }
            else if((s[l]=='b'||s[l]=='d'||s[l]=='p'||s[l]=='q')&&
				(s[r]=='b'||s[r]=='d'||s[r]=='p'||s[r]=='q')){ l++; r--; }
            else if((s[l]=='u'||s[l]=='n') && (s[r]=='u'||s[r]=='n')){ l++; r--; }
            else if((s[l]=='w' && s[r]=='v' && s[r-1]=='v')||
				(s[l]=='m' && (s[r]=='n'||s[r]=='u') && (s[r-1]=='n'||s[r-1]=='u'))){ l+=1; r-=2; }
            else if((s[r]=='w' && s[l]=='v' && s[l+1]=='v')||
				(s[r]=='m' && (s[l]=='n'||s[l]=='u') && (s[l+1]=='n'||s[l+1]=='u'))){ l+=2; r--; }
            else{
                flag=1;
                break;
            }
        }
        if(flag==0) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}