一、什么是回文
形如 ABCBA 的字符串或12321的数字被称为回文。
二、怎么判断回文
1、数字型回文
利用/ %运算把不同数位上的数分隔开,再把数倒置并于原数进行比较,若相等则是回文,不相等则不是。(判断回文的数字一般会很大,所以用long型)
bool symm(long m){
long temp = m,n=0;
while (temp){
n = n*10+temp%10;
temp = temp/10;
}
return (m == n);
}
2、字符串型回文
字符串型回文的判断方式较多,这里列举常用的两种。
第一种是把字符串看作字符数组,利用数组下标从字符数组的两头开始比较,若两两字符均相同则为回文。
bool symm(string s){
int i,j;
for(i = 0,j = s.length()-1;i<=j;i++,j--){
if(s[i] != s[j]) return false;
}
return true;
}
另一种需要用到栈,利用栈先进后出的特性,可以把一个字符串先倒置,然后再进行比较,本质上与前一种方法类似,但前一种效率更高,从两头开始比较,节省一半时间。
bool symm(string str) {
for(int i=0;i<n;i++)
str1.push(a[i]);
for(int i=0;i<n;i++){
if(str[i]!=str1.top())
return false;
str1.pop();
}
return true;
}
上方代码,需要定义全局变量stack < int > str1,用来判断数字型,若题目中给定的数据是字符型把< int > 改成< char >即可.