算法练习-回文判断

练习问题来源

https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/01.04.html

要求:

判断一个字串是否是回文。

解法:

// -------------------回文判断
// 判断一个字串是否是回文

bool IsPalindrome0(const char *s, int n)
{
    // 同时从字符串头尾开始向中间扫描字串,如果所有字符都一样,那么这个字串就是一个回文,
    // 采用这种方法只需要维护头部和尾部两个扫描指针即可
    if (0 == s || n < 1)
    {
        return false;
    }
    const char *front, *back;   // 指向常量 char 类型的指针, 指针可改变; "char const *front" 指针是常量, 不能改变必须初始化
    front = s;
    back = s + n -1;
    while(front < back)
    {
        if(*front != *back)
            return false;
        else
        {
            ++front;
            --back;
        }
    }
    return true;
}
bool IsPalindrome1(const char *s, int n)
{
    // 先从中间开始、然后向两边扩展查看字符是否相等
    if (0 == s || n < 1)
        return false;
    const char *front, *back;
    front = s + n / 2 -1;
    back = s + (int)ceil(n / 2.0);
    while(front > s)
    {
        if(*front != *back)
            return false;
        else
        {
            --front;
            ++back;
        }
    }

    return true;
}

 

 

 

posted @ 2016-05-09 23:01  NobodyZhou  阅读(354)  评论(0编辑  收藏  举报