Translate 读入一个字符串,判断是否是回文,$* $可以作为任何数来用 思路 其实不用栈这么麻烦,蒟蒻写个好办法。 因为回文,不就是正着读和到着读都一样嘛(不是废话啊),可以转
Translate
读入一个字符串,判断是否是回文,$* $可以作为任何数来用
思路
其实不用栈这么麻烦,蒟蒻写个好办法。
因为回文,不就是正着读和到着读都一样嘛(不是废话啊),可以转换为任意字符,也就是说我们只要\(*\)字符符全部替换成可以对称的字符。
然后我们换一种想法,就是让程序同时正着读和倒着读,就是i和j两个哨兵从这个字符串的两端出发如果\(2\)个哨兵探测到的字符不一样,并且没有好的时候就用样例\(3\)演示一下:a*bc*
哨兵\(i\)和哨兵\(j\)一起出发\(a\)和不一样,然后看见哨兵\(j\)有号,继续,是\(*\)和\(c\)同理。最后\(2\)个哨兵站在\(b\)上所以探测结束。上超短代码
Code
#include<bits/stdc++.h> using namespace std; char s[100001]; int main() { cin>>s; int len=strlen(s)-1;//因为下标从0开始嘛 for(int i=0,j=len;i<len;i++,j--)//i,j哨兵开始探测 { if(s[i]!=s[j]&&s[i]!=‘*‘&&s[j]!=‘*‘)//在2个字符不相等且没有*转换的话就输出NO结束程序 { cout<<"NO"<<endl; return 0; } } cout<<"YES"<<endl;//能到这里代表判断成功,输出YES return 0; }