博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode刷题125 验证回文串 Valid Palindrome(简单) Python Java
阅读量:4128 次
发布时间:2019-05-25

本文共 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)

参数:

  • 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/

你可能感兴趣的文章
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>
1060 Are They Equal (25 分)
查看>>
83. Remove Duplicates from Sorted List(easy)
查看>>
88. Merge Sorted Array(easy)
查看>>
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>