当前位置 : 主页 > 大数据 > 区块链 >

[AtCoder1213]高橋くんと回文

来源:互联网 收集:自由互联 发布时间:2021-06-22
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;
}
网友评论