[leetcode] 125. Valid Palindrome
来源:互联网 发布:java处理数据的io发 编辑:程序博客网 时间:2024/05/16 06:32
题目描述:
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.
题意:
判断去除空格和标点后的字符串是否为回文,即所谓的有效回文判断。
python代码:
class Solution: # @param {string} s A string # @return {boolean} Whether the string is a valid palindrome def isPalindrome(self, s): start, end = 0, len(s) - 1 while start < end: while start < end and not s[start].isalpha() and not s[start].isdigit(): start += 1 while start < end and not s[end].isalpha() and not s[end].isdigit(): end -= 1 if start < end and s[start].lower() != s[end].lower(): return False start += 1 end -= 1 return True
Python isalpha()方法
描述:检测字符串是否只由字母组成。
参数:无
返回值:如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回 False
Python isdigit()方法
**描述:**Python isdigit() 方法检测字符串是否只由数字组成。
**语法:**str.isdigit()
参数:无。
返回值:如果字符串只包含数字则返回 True 否则返回 False。
程序思路:逐个判断,如果不是字母或者数字就移动start和end指针;否则判断两指针对应的字符是否相同,从而判断是否为回文。
我的代码:
class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ from string import punctuation # s = s.replace(s.punctuation,"") # s.translate(None, punctuation) s = "".join(s.split()) s = "".join([c for c in s if c not in punctuation]) start = 0 end = len(s) - 1 if start == end: return True while start < end: if s[start].lower() == s[end].lower(): start = start + 1 end = end - 1 else: return False return True
我的思路是先去掉空格和标点符号。由于去掉空格和标点符号都要对字符串进行一次遍历,所以复杂度就高了T^T。
不过这里还学了挺多的,比如怎么去掉空格和标点符号,还有python是大小写敏感的,就需要转换一下[用upper(),lower()]才可以比较。
知识补充:
字符串去掉标点符号:
参考:http://www.itstrike.cn/Question/5860b8a2-6c44-44f4-8726-c5a7603d44cc.html
- 使用str.translate:
from string import punctuation[ x.translate(None, punctuation) for x in lis]
from string import punctuationstrs.translate(None, punctuation)
- 使用正则表达式:
import re[ re.sub(r'[{}]+'.format(punctuation),'',x ) for x in lis]
re.sub(r'[{}]+'.format(punctuation),'', strs)
- 使用list的comprehension和str.join:
["".join([c for c in x if c not in punctuation]) for x in lis]
"".join([c for c in strs if c not in punctuation])
其实还是有点问题的,因为用的前两种,好像编译时候还是不行。
使用translate时候会提醒translate只需要一个参数。好吧,还是需要看看python学习手册。慢慢解决。
- [LeetCode]125.Valid Palindrome
- LeetCode 125. Valid Palindrome
- [Leetcode] 125. Valid Palindrome
- 【LeetCode】125.Valid Palindrome
- [leetcode] 125.Valid Palindrome
- [leetcode] 125.Valid Palindrome
- Leetcode 125. Valid Palindrome
- 125. Valid Palindrome LeetCode
- 【LeetCode】125. Valid Palindrome
- Leetcode 125. Valid Palindrome
- LeetCode 125. Valid Palindrome
- LeetCode 125. Valid Palindrome
- LeetCode *** 125. Valid Palindrome
- 【leetcode】125. Valid Palindrome
- [leetcode] 125. Valid Palindrome
- leetcode-125. Valid Palindrome
- LeetCode-125.Valid Palindrome
- leetcode 125. Valid Palindrome
- ETL技术入门之发送邮件(二)
- PHP观察者模式
- Apache
- 摘要 MAC,PIN,磁道密钥 在平时的工作中,很少接触安全这块内容,最近需要自己独立完成安全这块内容,在开发中遇到的问题会在下面的理解中得到相应的解决。 在交易平台中,基于安全考
- 加权
- [leetcode] 125. Valid Palindrome
- android中ListView嵌套GridView图片显示的问题
- Java类初始化完整步骤
- MySQL各版本的区别
- leetcode 336. Palindrome Pairs
- Java多线程面试问题
- 不同运行时库/MT、/MD等编译选项,以及可能引起在不同堆中申请、释放内存的问题
- 索引的mapreduce实现
- ios xcode Could not load the "MyImage.png" image referenced from a nib in the bundle with identifier