面试算法题目1
Posted repinkply
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试算法题目1相关的知识,希望对你有一定的参考价值。
一:题目简介以及来源
来源于leetocode125。
这个题目说的是,给你一个字符串,你要判断它是否是回文字符串。字符串里只考虑字母和数字,其它的字符可以无视。另外,对于字母,可以忽略大小写。
二:解题思路
1.看到判断是否为回文字符串肯定要想到双指针法,一个指向字符串的头部,一个指向字符串的尾部。当遇到不是字母或者数字的时候,头指针就往前移动,尾指针就往后移动。对应的代码可以为:int i=0,int j=s.length()-1;其中s代表这个字符串
2.字符串里只考虑字母和数字,就要单独编写一个函数判断头指针和尾指针所指向的字符是不是字母或者数字。
bool isAlphaNum(char c)
{
return ((c>=‘a‘)&&(c<=‘z‘)) || ((c>=‘A‘)&&(c<=‘Z‘)) || ((c>=‘0‘)&&(c<=‘9‘));
}
3.另外,对于字母,可以忽略大小写。这事就需要编写一个函数,将字母的大小写给忽略掉,一般的做法将大写字母转化为小写字母,或者将小写字母转化为大写字母,然后再比较2者是否相等。
bool isEqualIgnoreCase(char a, char b)
{
if ((a >= ‘A‘) && (a <= ‘Z‘)) a += 32;
if ((b >= ‘A‘) && (b <= ‘Z‘)) b += 32;
return (a==b);
}
4.细节地方玩玩能够看出一个人的功底怎么样?所以,如果当这个字符串为空时,它也是一个字符串。if (s.length() == 0) return true;
5.用一个for循环遍历一遍整个字符串就行,条件for(;i<j;i++,j--)
三:完整代码示例
C++版:
#include <iostream>
#include <string>
using namespace std;
class Solution
{
public:
bool isAlphaNum(char c)
{
return ((c>=‘a‘)&&(c<=‘z‘)) || ((c>=‘A‘)&&(c<=‘Z‘)) || ((c>=‘0‘)&&(c<=‘9‘));
}
bool isEqualIgnoreCase(char a, char b)
{
if ((a >= ‘A‘) && (a <= ‘Z‘)) a += 32;
if ((b >= ‘A‘) && (b <= ‘Z‘)) b += 32;
return (a==b);
}
bool isPalindrome(string s)
{
if (s.length() == 0) return true;
int i = 0, j = s.length() - 1;
for (; i < j; i++, j--)
{
while ((i < j) && (!isAlphaNum(s[i]))) i++;
while ((i < j) && (!isAlphaNum(s[j]))) j--;
if ((i < j) && (!isEqualIgnoreCase(s[i], s[j]))) return false;
}
return true;
}
};
以上是关于面试算法题目1的主要内容,如果未能解决你的问题,请参考以下文章