回文判断(C/C++)
来源:互联网 发布:c语言函数头举例 编辑:程序博客网 时间:2024/05/14 08:37
给定一个字符串,如何判断这个字符串是否是回文串?
思路一:直接在字符串的首尾两端各放置一个指针*front和*back,然后开始遍历整个字符串,当*front不再小于*back时完成遍历。在此过程中,如果出现二者的值不相等,那么久表示不是回文串;如果两个指针指向的字符始终相等就表示该字符串是回文字符串。
时间复杂度:O(n)
思路二:先使用快慢指针确定出字符串的中间位置,然后分别使用两个指针从开中间位置开始向相反的方向扫描,知道遍历完整个字符串。
时间复杂度:O(n)
找中间位置的方法:
1、快慢指针;
2、一种有效的计算方法
//m定位到字符串的中间位置
int m = ((n >> 1) - 1) >= 0 ? (n >> 1) - 1 : 0;first = str + m;second= str + n - 1 - m;
两种思路的代码如下:
//思路一#include <iostream>using namespace std;//*s为字符串,n为字符串的长度bool IsPalindrome(char *str, int n){//指向字符串首尾的指针char *front = str;char *back = str + n - 1;if(str==NULL||n<1){return false;}while (front<back){if (*front != *back){return false;}front++;back--;}return true;}int main( ){char str[] = "abba";int n = strlen(str);bool sign;sign = IsPalindrome(str, n);if (sign == true){cout << "此字符串是回文字符串"<<endl;}else{cout << "此字符串不是回文字符串" << endl;}return 0;}//思路二#include <iostream>using namespace std;//*s为字符串,n为字符串的长度bool IsPalindrome(char *str, int n){//指向字符串首尾的指针char *first;char *second;if (str == NULL || n<1){return false;}//m定位到字符串的中间位置int m = ((n >> 1) - 1) >= 0 ? (n >> 1) - 1 : 0;first = str + m;second= str + n - 1 - m;while (first>str){if (*first!= *second){return false;}first--;second++;}return true;}int main( ){char str[] = "abcgba";int n = strlen(str);bool sign;sign = IsPalindrome(str, n);if (sign == true){cout << "此字符串是回文字符串"<<endl;}else{cout << "此字符串不是回文字符串" << endl;}return 0;}
综上所述,虽然上面两种方法采用不同的遍历方式来扫描字符串,但是最终的时间复杂度都是一样,效率基本上是一样的。
1 0
- 回文判断(C/C++)
- c 判断回文字符
- C判断回文数
- C 语言,判断回文
- C 判断回文
- c语言"回文"判断
- C语言判断回文
- C/C++判断回文数(转)
- 判断回文(c语言实现)
- (C语言)回文数的判断
- 回文数及其判断(C++)
- C语言判断回文数
- C语言 判断回文字符串
- 【c语言】判断回文数组
- 【c语言】判断回文字符串
- C语言--判断回文数
- Problem C: 判断回文串
- C/C++回文数的判断(转)
- 清除系统会话
- UEditor上传图片与spring mvc上传图片冲突问题。
- google guava使用例子/示范(一)
- eclipse 关于svn的教程
- 计算机存储器
- 回文判断(C/C++)
- 使用ajax提交form表单,包括ajax文件上传
- Java注解三 JUnit注解的简单实现
- LaTeX数学公式编辑学习
- 获取项目路径
- JS新API标准 地理定位(navigator.geolocation)
- toolbox-shell命令汇总
- hashCode
- c++ STL vector map的使用