代码改变世界

回文判断

2015-08-18 22:01  codinglol  阅读(176)  评论(0编辑  收藏  举报

题目描述

回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如madam、我爱我,这样的短句在智力性、趣味性和艺术性上都颇有特色,中国历史上还有很多有趣的回文诗。

那么,我们的第一个问题就是:判断一个字串是否是回文?

分析与解法

解法一:

使用两个指针分别指向字符串的头尾,同时向中间遍历字符串,如果所有字符均相同,则是回文,代码如下:

 1 bool IsPalindrome(const char *str){
 2     if (str == nullptr)
 3         return false;
 4 
 5     int length = strlen(str);
 6     const char *begin = str;
 7     const char *end = begin + length - 1;
 8 
 9     while (begin < end){
10         if (*begin != *end)
11             return false;
12         ++begin;
13         --end;
14     }
15     return true;
16 }
时间复杂度为O(n),空间复杂度为O(1)

解法二:
从中间开始分别向两头遍历,检查字符是否都相同,代码如下:
 1 bool IsPalindrome2(const char *str){
 2     if (str == nullptr)
 3         return false;
 4 
 5     int length = strlen(str);
 6     if (length < 1)
 7         return false;
 8 
 9     const char *first, *second;
10     int mid = length >> 1;
11     first = str + mid - 1;
12     second = str + length - mid;
13 
14     while (first >= str){
15         if (*first-- != *second++)
16             return false;
17     }
18     return true;
19 }
时间复杂度也为O(n),空间复杂度为O(1)