面试题5:回文字符串的判断
2016-03-21 20:45 Keiven_LY 阅读(813) 评论(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; }