代码改变世界

面试题5:回文字符串的判断

2016-03-21 20:45  Keiven_LY  阅读(805)  评论(0编辑  收藏  举报

题目描述

给定一个字符串,如何判断这个字符串是否是回文字符串?

方法一:从两头向中间扫

基本思想:定义两个指针分别指向字符串的头和尾,然后让这两个指针同时向字符串的中间扫描,扫描过程中,如果头和尾指针所指的字符至始至终都一样,则说明该字符串为回文字符串,只要有一次不一样,就说明该字符串不是回文字符串。

bool isRollbackString(const char *s)
{
    if(s == NULL)
        return false;
    int n=strlen(s);
    //初始化头指针和尾指针
    const char *start= s;
    const char *end = s+n-1;
    
    while(start < end)
    {
        if(*start != *end)
            return false;
        ++start;
        --end;
    }
    return true;        
}

方法二:从中间向两头扫

bool isRollbackString(const char *s, int n)
{
    if(s == NULL || n < 1)
    {
        return false;
    }
    
    const char *first;
    const char *second;
    
    int m=((n >> 1) - 1) >=0 ? (n >> 1) - 1 : 0;//m定位到字符串的中间位置
    
    first = s + m;
    second = s + n -1 -m;
    
    while(first >= s)
    {
        if(*first != *second)
        {
            return false;
        }
        --first;
        ++second;    
    }
    return true;
}