题目:
给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
样例
"A man, a plan, a canal: Panama" 是一个回文。
"race a car" 不是一个回文。
注意
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。
挑战
O(n) 时间复杂度,且不占用额外空间。
解题:
去除非有效字符后,整体是个回文串,两边查找,利用快速排序的思想,通过while找到有效的字符串
Java程序:
public class Solution { /** * @param s A string * @return Whether the string is a valid palindrome */ public boolean isPalindrome(String s) { // Write your code here if(s.equals("")) return true; int len = s.length(); int left = 0; int right = len - 1; s = s.toLowerCase(); while(left < right){ char leftchar = s.charAt( left ); char rightchar = s.charAt( right ); while(!isValid(leftchar)){ left ++; leftchar = s.charAt( left ); if(left>=right) return true; } while(!isValid(rightchar)){ right --; rightchar = s.charAt( right ); if(right<=left) return true; } if(leftchar != rightchar) return false; left ++; right --; } return true; } public boolean isValid(char ch){ if(ch>='a' && ch <= 'z') return true; if(ch >='0' && ch <= '9') return true; return false; } }