Valid Palindrome
来源:互联网 发布:北大外国语学院知乎 编辑:程序博客网 时间:2024/04/29 02:55
题目
题意
判断字符串是否为回文。
例如:
“A man , a plan , a canal : Panama” 这个是回文(amanaplanacanalpanama)。
“race a car”这不是回文。
字符串中我们只关注字符为字母的,忽略其他类型的字符。
注意:要求一次遍历,不开辅助空间。
函数形式
思路
因为要一次遍历,可以利用双指针的原理,从字符串的头尾开始向中间遍历,声明low和high,作为数组的下标,每次进行一次判断,如果该字符不是字母或数字就移动指针,low++或者high–;如果是字母或者字符就判断头尾的两字符是否相等,若不相等就返回false,相等则继续移动指针,这是low++,high–同时进行。
直到low和high相等,即将数组遍历完后,这是就证明数组中满足要求的字符都遍历完了且相等,即为回文,返回true。
代码
bool isPalindrome(char* s){ int len=strlen(s); int low=0,high=len-1; while (low<high)//当low=high时数组就遍历完了 { if ((s[low]>='a' && s[low]<='z') || (s[low]>='A' && s[low] <= 'Z') || (s[low] >='0' && s[low] <='9'))//判断是否为字母或者字符 { if ((s[high]>='a' && s[high]<='z') || (s[high]>='A' && s[high]<='Z') || (s[high]<='9' &&s[high] >= '0')) { if (tolower(s[low]) != tolower(s[high]))//转化成小写字母比较,若不相等就返回false,不是回文 { return false; } else//若相等则继续比较 { low++; high--; } } else//尾部的字符不满足字符或者数字的,将指针向前移 { high--; continue; } } else//头部的字符不满足的,将指针想后移 { low++; continue; } } return true;//数组遍历完即证明是回文}
总结
1.表头文件
#include<stdlib.h>
tolower(将大写字母转换成小写字母)
定义函数 int tolower(int c);
函数说明 若参数c为大写字母则将该对应的小写字母返回。
返回值 返回转换后的小写字母,若不须转换则将参数c值返回。
函数名: toupper
功 能: 把字符转换成大写字母
用 法: int toupper(int c);
2.注意双指针的应用,并不是真的指针,只是代表数组下标,根据情况移动数组的下标,并通过这个下标读取数组中的数据,从头尾同时向中间移动,实现一次遍历。
3.还要注意判断条件的放置,最开始的时候我是对满足条件的字符进行处理,反而要考虑很多情况,且布局很乱,其实从没有满足就怎样的角度来做反而要简单些,即不是字母或者字符就移动指针,是就比较,不相等就返回false,终止。相等就继续。
4.注意加上continue语句,因为不满足字母或数字时,每次只移动一个指针,low或者high,谁不满足就移动谁,只有都满足且相等才能同时移动。
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- valid palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- Valid Palindrome
- 做一个输出任意行(奇数)的空心菱形
- asp.net mvc中自行搭建实现工厂模式的spring.net+三层架构(一)
- 用jquery.form ajax提交文件上传表单
- 欢迎使用CSDN-markdown编辑器
- 迁移Zabbix数据库到TokuDB
- Valid Palindrome
- OpenCV实践之路——用dlib库进行人脸检测与人脸标记(Python)
- AS 60L flammable storage cabinet for material handling equipment
- java线程池newFixedThreadPool详解
- eclipse如何终止对Android项目的调试
- 【静下心学习Unity】学习笔记 (二)Unity基础知识点
- 强引用、软引用、弱引用、虚引用的概念以及如何避免OOM错误
- C++实验3-个人所得税计算器
- 二叉树的基本操作(非递归前中后遍历,先序,表达式建树,复制二叉树)