[leetcode]Valid Palindrome
来源:互联网 发布:淘宝货到付款退款流程 编辑:程序博客网 时间:2024/06/03 14:42
题目描述如下:
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.
因为是Easy题,所以第一遍代码根本没怎么想:
public class Solution { public boolean isPalindrome(String s) { if(s.length == 0) return true; String tmpStr = changeStr(s); return judgeStr(tmpStr); } public String changeStr(String s){ String res = ""; int len = s.length(), i; for(i = 0; i < len; i++){ char ch = s.charAt(i); if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')){ res = res + ch; } } return res.toLowerCase(); } public boolean judgeStr(String s){ boolean flag = true; int len = s.length(), i; for(i = 0; i < len / 2; i++){ if(s.charAt(i) != s.charAt(len - 1 - i)){ flag = false; break; } } return flag; }}
然后在最后一个极暴力的测试数据面前TLE了。
既然这样那就是只能对字符串进行一遍扫描,最常用的就是双指针法,注意一下这里数字也是有效字母
public class Solution { public boolean isPalindrome(String s) { return judgeStr(s); } public boolean judgeStr(String s){ if(s.length() == 0) return true; char preLetter, lastLetter; int i = 0, j = s.length() - 1; while(i < j){ while(!isLetter(s.charAt(i)) && i < j) i ++; while(!isLetter(s.charAt(j)) && i < j) j --; if(i >= j) break; preLetter = s.charAt(i); lastLetter = s.charAt(j); if(lowerCase(preLetter) != lowerCase(lastLetter)) return false; else { i ++; j --; } } return true; } public boolean isLetter(char ch){ return ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9'; } public char lowerCase(char ch){ if(ch >= 'A' && ch <= 'Z') return (char)(ch + 'a' - 'A'); else return ch; }}
题目链接:https://leetcode.com/problems/valid-palindrome/
0 0
- [Leetcode] Valid Palindrome
- Leetcode: Valid Palindrome
- leetcode 55: Valid Palindrome
- [LeetCode] Valid Palindrome
- 【leetcode】Valid Palindrome
- LeetCode - Valid Palindrome
- [leetcode]Valid Palindrome
- [LeetCode]Valid Palindrome
- [Leetcode]Valid Palindrome
- LeetCode-Valid Palindrome
- [leetcode] Valid Palindrome
- LeetCode 125: Valid Palindrome
- LeetCode - Valid Palindrome
- leetcode之Valid Palindrome
- LeetCode | Valid Palindrome
- [leetcode]Valid Palindrome
- 【leetcode】Valid Palindrome
- LeetCode题解:Valid Palindrome
- Objective-C语法之代码块(block)的使用
- 用JavaScript传递div到新的页面
- java面试题
- Django项目用mod_wsgi部署到Apache2, Ubuntu 14.04
- 某网hadoop视频全套
- [leetcode]Valid Palindrome
- Synchronized详解
- android studio Project format eclipse Project
- Python基础教程
- Android 的 SDK Manager 无法启动 闪退解决方法
- YUV数据分析
- StringBuilder在高性能场景下的正确用法
- TFS(Taobao File System)安装办法
- mysql 构建大表及myisam 基础知识