回文判断
来源:互联网 发布:手机查看淘宝图片空间 编辑:程序博客网 时间:2024/05/11 14:17
问题
回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如madam、我爱我,这样的短句在智力性、趣味性和艺术性上都颇有特色,中国历史上还有很多有趣的回文诗。那么如何判断一个字串是否是回文?
思路1
既然回文字符串有正过来和反过来读都一样的特性,那么我们可以考虑将字符串翻转,然后再与原字符串相比较,这种思路是最显而易见的。这种思路的时间复杂度和空间复杂度都为O(n):
void Reverse(char *str, int from, int to){ if(NULL == str) return ; while(from < to){ char temp = str[from]; str[from++] = str[to]; str[to--] = temp; }}bool IsPalindrome(char *str){ char *p = new char[strlen(str)]; strcpy(p, str); Reverse(str, 0, strlen(str)-1); int begin = 0; while(begin < strlen(str)){ if(p[begin] != str[begin]) return false; ++begin; } return true;}
思路2
虽然思路1很好的解决了这个问题,但是我们有没有更好的方法呢?当然有,可以之间比较第一个字符和最后一个字符,第二个字符与倒数第二个字符……,这种方法的空间复杂度可以减小到O(1).
bool IsPalindrome(char *str){ if(NULL == str) return false; int begin = 0; int end = strlen(str)-1; while(begin < end){ if(str[begin++] != str[end--]){ return false; } } return true;}
思路3
思路3其实就是思路2的逆过程,从中间往两边比,时间复杂度和空间复杂度跟2是一样的。
bool IsPalindrome(char* str, int n){ if(NULL == str || n < 1) return false; char *first, *second; int m = n/2 - 1; first = str + m; second = str + n - m - 1; while(first >= str){ if(*(first--) != *(second++)) return false; } return true;}
0 0
- 判断回文
- 回文判断
- 判断回文
- 判断回文
- 回文判断
- 回文判断
- 判断回文!
- 判断回文
- 回文判断
- 判断回文
- 回文判断
- 回文判断
- 判断回文
- 回文判断
- 回文判断
- 判断回文
- 回文判断
- 判断回文
- 图画
- android系统相机
- typedef 的用法总结
- C++14尝鲜:在C++中实现LINQ
- 第九周项目1(2)-复数类中的运算符重载(续)
- 回文判断
- mysql 批量插入问题
- java 获取键盘输入的值,并将值转换为int类型
- 为ListView每个Item上面的按钮添加事件
- 【Mac】如何直接屏幕截图复制到剪切板
- 链表回文判断
- 1.求正差值
- Python中异常处理简单示例(try,except,finally)
- java 第四天