码迷,mamicode.com
首页 > 编程语言 > 详细

面试算法题目1

时间:2020-03-05 13:51:37      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:字母转   ali   回文字符串   思路   一个   ignore   stream   循环   amp   

一:题目简介以及来源

来源于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

标签:字母转   ali   回文字符串   思路   一个   ignore   stream   循环   amp   

原文地址:https://www.cnblogs.com/repinkply/p/12419469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!