每天一道面试题(一)

每天一题,讲解面试中最常见或者最新的算法题。

回文字符串与回文数字

<一>回文字符串

        (微策略.2013/10/21.北京)任意给定一个字符串,判断该字符串是否是回文字符串。默认空串(即“\0”)为最小回文串。

          思路:首尾指针法——用两个指针分别指向串的首尾,同时向中间扫描,直到出现指针引解(即指针指向的值)不等或首尾指针相遇为止。

          备注:首尾指针法在算法中是一个十分常见的处理手段,尤其是在线性表中。很多的算法解都可以用首尾指针解答,读者在平时做题过程中应该多多总结。首尾指针法是双   指针的一个特列。双指针法在算法中也处于十分重要的地位。

          代码:

bool IsPalindromes (char *str)
{
	if (str==NULL)
	{
		return false;//边界检测
	}
	else
	{
		int i=0;//首指针
		int j=strlen(str)-1;//尾指针
		while (i
<二>回文数字

(创新工场.2013/10.北京)给定任意一个整数,判断是否是回文数字,例如1991是回文,1992不是回文。

分析:首先明确一点,给定的数是一个int32的整数,有正负号之分。题目没有明确说明负数是否也有回文,例如-1991或-0。如果单从表现形式上看-1991和-0不能算作回文数字,但是这样就有一个矛盾,0是回文但是-0不是回文,而0和-0的二进制模式是一模一样的,实在是蛋疼。为了理解方便,也问了展示算法的核心,这里我们就不纠结正负数了,仅仅考虑这个整数是自然数的情况。

代码:

bool IsPalindromes (int num)
{
	if (num<0)//忽略负数情况
	{
		return false;
	}
	else
	{
		int tmp_result=0;
		int tmp_num=num;
		while (num>0)
		{
			tmp_result=tmp_result*10+num%10;
			num/=10;
		}
		return tmp_result==tmp_num;
	}
}
评论:如果输入的数据是浮点数呢?应该怎么处理?

你可能感兴趣的:(笔试面试,数据结构与算法)