在处理回文序列时,可以想到使用双指针,尤其对于本题中'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;
}



京公网安备 11010502036488号