说明:转载请标明出处http://blog.csdn.net/yuanwei1314/article/details/40792731
题目:
回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如madam、我爱我,这样的短句在智力性、趣味性和艺术性上都颇有特色,中国历史上还有很多有趣的回文诗。
那么,我们的第一个问题就是:判断一个字串是否是回文?
思路一:从两头比较,时间复杂度O(n),空间复杂度O(1)
#include <stdio.h>
#include <stdlib.h>
/*判断字符串是否为回文
从两边往中间比较*/
bool isPalindrome(char *s, int n)
{
int high = n-1;
int low = 0;
while (low < high)
{
if (*(s+low) != *(s+high))
{
return false;
}
low++;
high--;
}
return true;
}
int main()
{
char s[] = "madam";
if (isPalindrome(s, strlen(s)))
{
printf("true\n");
}
else
{
printf("false\n");
}
return 0;
}
思路二:从中间往两头比较,时间复杂度O(n),空间复杂度O(1)
#include <stdio.h>
#include <stdlib.h>
/*判断字符串是否为回文
从中间往两边比较*/
bool isPalindrome(char *s, int n)
{
int high;
int low;
if (n%2 != 0)
{
high = n/2+1;
low = n/2-1;
}
else
{
high = n/2;
low = n/2-1;
}
while (low>0 && high<n)
{
if (*(s+low) != *(s+high))
{
return false;
}
low--;
high++;
}
return true;
}
int main()
{
char s[] = "madddam";
if (isPalindrome(s, strlen(s)))
{
printf("true\n");
}
else
{
printf("false\n");
}
return 0;
}