本文共 2595 字,大约阅读时间需要 8 分钟。
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。示例1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例2:
输入: “race a car”
输出: false
解法一:
利用一个双指针,一个从前往后的left指针,一个从后往前的right指针,检查left和right是否相等,若相等继续,若不相等返回False。在检查之前需要将字符串大写变小写。以便统一大小写,方便比较。另外,由于字符串中可能有空格和标点符号,因此需要检查指针所指向的字符是否是数字和字母,如果不是,就跳过。
class Solution(object): def isPalindrome(self, s): """ :type s: str :rtype: bool """ l = 0 r = len(s) - 1 while l < r: # 如果是纯字母或纯数字的字符串 if not s[l].isalnum(): # isalnum()方法检测字符串是否由字母和数字组成 l += 1 continue if not s[r].isalnum(): r -= 1 continue if s[l].lower() != s[r].lower(): return False else: l += 1 r -= 1 return True
解法二:
将数字及字母过滤出来,过滤这个事件,就要想到filter
这个函数,判断是否是字母或者数字,用isalnum
这个函数,然后需要区分大小写,用到low
这个函数转小写。
class Solution: def isPalindrome(self, s): """ :type s: str :rtype: bool """ s = ''.join(filter(str.isalnum,str(s.lower()))) return s==s[::-1]
知识点:
1.join():Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。 用法str = "-";seq = ("a", "b", "c"); # 字符串序列print str.join( seq );
输出:a-b-c
2.filter():filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。 语法:filter(function, iterable)
参数:
用法:
def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])print(newlist)
输出:[1, 3, 5, 7, 9]
3.isalnum():Python isalnum() 方法检测字符串是否由字母和数字组成。
用法:
str = "this2009"; # 字符中没有空格print str.isalnum();str = "this is string example....wow!!!";print str.isalnum();
输出:
True
False
以下是Java版本:
解题思路:
设置两个指针,一个在字符串头部,一个在字符串尾部,分别向中间移动,遇到非字母或数字则继续向中间移动,如两个都为字母或者数字,那么则比较两者是否相同。
代码如下:
public class Solution { public boolean isPalindrome(String s) { int i = 0, j = s.length() - 1; char head, tail; if(j < 0) return true; while(i < j){ head = s.charAt(i); tail = s.charAt(j); if(!Character.isLetterOrDigit(head)){ i++; } if(!Character.isLetterOrDigit(tail)){ j--; } if(Character.isLetterOrDigit(head) && Character.isLetterOrDigit(tail)){ if(Character.toLowerCase(head) != Character.toLowerCase(tail)){ return false; } i++; j--; } } return true; }}
转载地址:http://dpuvi.baihongyu.com/