总时间限制: 1000ms 内存限制: 65536kB
描述
任意给定一个非空的字符串,判断其是否是回文串。回文串是指正向看和反向看均相等的串,如 AbcDcbA 和 cDDc。如果是回文串,则输出 1,否则,输出 0
输入
长度不小于 1 不大于 100 的字符串
输出
如果是回文串,输出 1
如果不是回文串,输出 0
样例输入
样例输出
思路
方法一:栈思想
将字符串的前半部分入栈,然后遍历后半部分,判断是否和栈顶元素相等。
这里要注意字符串长度为奇数和偶数的情况。
方法二:双指针
设置两个指针,一个指向字符串的头部,一个指向字符串的尾部,判断两个指针指向的字符是否相等。
Code
C++
方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <bits/stdc++.h> using namespace std; int main() { string str; stack<char> S; cin >> str; for(long long unsigned int i = 0; i < str.size()/2; i++) { S.push(str[i]); } if(str.size() % 2 == 0) { for(long long unsigned int i = str.size()/2; i < str.size(); i++) { if(str[i] != S.top()) goto out; S.pop(); } } else { for(long long unsigned int i = str.size()/2+1; i < str.size(); i++) { if(str[i] != S.top()) goto out; S.pop(); } } cout << 1; goto out1; out:; cout << 0; out1:; }
|
方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <bits/stdc++.h> using namespace std; int main() { string str; cin >> str; for(int i = 0, j = str.size()-1; i < j; i++, j--){ if(str[i] != str[j]) { cout << 0; goto out; } } cout << 1; out:; }
|