判断回文的两种方式

一、什么是回文

形如 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 >即可.

猜你喜欢

转载自blog.csdn.net/weixin_45218241/article/details/112911466