博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
125. Valid Palindrome
阅读量:6803 次
发布时间:2019-06-26

本文共 3507 字,大约阅读时间需要 11 分钟。

题目:

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.

链接: 

题解:

根据题意用两个指针对冲法。

Time Complexity - O(n), Space Complexity - O(1)。

public class Solution {    public boolean isPalindrome(String s) {        if(s == null)            return true;        int lo = 0, hi = s.length() - 1;        s = s.toLowerCase();                while(lo <= hi) {            if(!isAlphanumeric(s.charAt(lo))) {                lo++;                continue;            }            if(!isAlphanumeric(s.charAt(hi))) {                hi--;                continue;            }            if(s.charAt(lo) != s.charAt(hi))                return false;            else {                lo++;                hi--;            }        }                return true;    }        private boolean isAlphanumeric(char c) {        if(Character.isDigit(c) || Character.isLetter(c))            return true;        else            return false;    }}

 

二刷:

方法和一刷一样,双指针向中间夹逼,忽略非alphanumeric value,

Java:

Time Complexity - O(n), Space Complexity - O(1)。

public class Solution {    public boolean isPalindrome(String s) {        if (s == null) {            return false;        }        s = s.toLowerCase();        int lo = 0, hi = s.length() - 1;        while (lo <= hi) {            while (lo < hi && !isDigitOrAlphabet(s.charAt(lo))) {                lo++;            }                while (lo < hi && !isDigitOrAlphabet(s.charAt(hi))) {                hi--;            }            if (s.charAt(lo) == s.charAt(hi)) {                lo++;                hi--;            } else {                return false;            }        }        return true;    }        private boolean isDigitOrAlphabet(char c) {        if ((c <= '9' && c >= '0') || (c <= 'z' && c >= 'a')) {            return true;        }        return false;    }    }

 

使用库方法的

public class Solution {    public boolean isPalindrome(String s) {        if (s == null) {            return false;        }        int lo = 0, hi = s.length() - 1;        while (lo <= hi) {            while (lo < hi && !Character.isLetterOrDigit(s.charAt(lo))) {                lo++;            }                while (lo < hi && !Character.isLetterOrDigit(s.charAt(hi))) {                hi--;            }            if (Character.toLowerCase(s.charAt(lo)) == Character.toLowerCase(s.charAt(hi))) {                lo++;                hi--;            } else {                return false;            }        }        return true;    }}

 

三刷:

Java:

public class Solution {    public boolean isPalindrome(String s) {        if (s == null) return false;        int lo = 0, hi = s.length() - 1;        while (lo <= hi) {            char loChar = s.charAt(lo);            if (!Character.isLetterOrDigit(loChar)) {                lo++;                continue;            }            char hiChar = s.charAt(hi);            if (!Character.isLetterOrDigit(hiChar)) {                hi--;                continue;            }            if (Character.toLowerCase(loChar) != Character.toLowerCase(hiChar)) return false;            lo++;            hi--;        }        return true;    }}

 

 

Reference:

https://leetcode.com/discuss/23989/accepted-pretty-java-solution-271ms

转载地址:http://srjwl.baihongyu.com/

你可能感兴趣的文章
rsync搭建及管理
查看>>
STL:std::shared_ptr大致原理.
查看>>
高并发学习笔记(八)
查看>>
第四章 项目管理一般知识
查看>>
Python 调用cobbler API 学习笔记
查看>>
php安装常见错误解决
查看>>
eNsp下载地址(官网)
查看>>
raspberrypi的相关网址
查看>>
DirectX 最终用户运行时 Web 安装程序
查看>>
varnish
查看>>
linux学习-centos7上部署DNS服务
查看>>
在Silverlight中动态绑定页面报表(PageReport)的数据源
查看>>
决心书
查看>>
我的友情链接
查看>>
asci和ascii中文编码问题
查看>>
linux笔记 2-11 系统恢复
查看>>
windows下kafka+ELK的日志系统
查看>>
未来时代
查看>>
正则表达式总结
查看>>
ImageView的属性android:scaleType,即ImageView.setSca...
查看>>