字符串回文判断(palindrome)

来源:互联网 发布:java socket断点续传 编辑:程序博客网 时间:2024/06/05 11:47

描述:

前后对称的字符串可称为回文,比如 abcdedcba

用例:

"abc"   //false"abba"  //true"a"     //单个字符串 true""      //空字符串 true

CODE:

long myStrlen(char* head){    char* tail = head;    while (*tail)        tail++;    return tail - head;}// 回文英文单词:palindrome 这里不改了。。bool isHuiWen(char* head){    long len = myStrlen(head);    char* tail = head;    tail = head + len - 1;    while ((tail - head) > 0) {        if (*head != *tail)            return false;        tail--;        head++;    }    return true;}//下面是两种,递归现实现回文判断,推荐第二种bool isHuiWen2(char* head, char* tail){    if (*head != *tail)        return false;    if (tail - head < 2) {        return true;    } else if (tail - head > 1) {        return isHuiWen2(++head, --tail);    }    return false;}bool isHuiWen3(char* head, long n){    if (n <= 1)        return true;    if (head[0] != head[n - 1]) {        return false;    }    if (n < 2) {        return true;    } else if (n > 1) {        return isHuiWen3(head + 1, n - 2);    }    return false;}int main(){    char str[] = "bbabb";    char* ch = str;    char* tail;    if (myStrlen(ch) < 1)        tail = &ch[0];    else        tail = ch + myStrlen(ch) - 1;    printf("%d\n", isHuiWen(ch));    printf("%d\n", isHuiWen2(ch, tail));    printf("%d\n", isHuiWen3(ch, myStrlen(ch)));}

一些总结:

  • 指针或数组通过下标[]操作,*tail = ch[0],直接返回的是这个指针的值,加&才是对应地址
  • 指针移动可通过 tail++; tail = ch + n; tail = &ch[1]; 三种方式都可以

  • 字符串指针操作 程序不会检查是否越界,这个需要自己控制好

能用递归实现的问题特点:

1.通常处理一个集合,
2.不论这个集合的大小,都需要执行相同的操作,和判断
3.集合能逐步化简

代码在XCode下编写,自带的re-indecent不好用,推荐一个在XCode8.0上能用的排版插件XcodeClangFormat:https://github.com/mapbox/XcodeClangFormat

原创粉丝点击