讲道理,连着做了两个palindrome的题目,挺崩溃的。上一个题目是9题,求整数是否是palindrome,但是没有说不算负数。。。所以第一次提交的时候,还对负数进行了取绝对值之后的判断。同样,在这道题目中,求string是否是Palindrome,开始每一次提交都会有错,原因是没有考虑字符串中存在数字的情况。不知道是题目表述的不清楚,还是自己脑回路清奇。 啰嗦了这么多,下面进入正题。
题目描述:Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example, “A man, a plan, a canal: Panama” is a palindrome. “race a car” is not a palindrome.
Note: Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome. 题目含义:不多赘述,就是判断一个string是否是Palindrome,还给举例证明了。人性化的是,在Note中题目指出了将空串定义为有效的Palindrome。 题目分析:思路比较简单。就是首先对string进行提纯处理,去掉标点符号;然后将预处理后的string中的字母转换成同一形式,均大写或者均小写;然后使用二分法的方式一次对首尾进行对称判断。这道题目比9题容易的地方在于,string可以用指针,不需要对string进行截断处理。
string中可以直接使用toupper()和tolower()方法进行大小写的转换。一开始还自己通过asii进行转换,有点蠢。 编程是个细心活儿,需要考虑到各种可能出现的情况,并且要对细节考虑的十分仔细。虽然很简单,但是还是在文章开始处提到的问题浪费了很多调试时间。。学艺不精。。我自己的代码往往都特别长,后期需要提高代码的效率和空间利用率。