lintcode :Valid Palindrome 有效回文串
题目:
给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
"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;
}
}
总耗时: 14651 ms
Python程序:
class Solution:
# @param {string} s A string
# @return {boolean} Whether the string is a valid palindrome
def isPalindrome(self, s):
# Write your code here
if s.isspace() or s=="":
return True
s = s.lower()
left = 0
right = len(s) - 1
while left< right:
while (self.isValid(s[left]))==False:
left += 1
if left>= right:
return True
while (self.isValid(s[right])) ==False:
right -=1
if left>=right:
return True
if s[left]!= s[right]:
return False
left += 1
right -= 1 return True def isValid(self,ch): # isalnum()
if ch.isalpha():
return True
if ch.isdigit():
return True
return False
总耗时: 825 ms
lintcode :Valid Palindrome 有效回文串的更多相关文章
- [leetcode]125. Valid Palindrome判断回文串
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- [LintCode] Valid Palindrome 验证回文字符串
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- [LeetCode] Valid Palindrome 验证回文字符串
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- [LeetCode] Shortest Palindrome 最短回文串
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...
- [LeetCode] 214. Shortest Palindrome 最短回文串
Given a string s, you are allowed to convert it to a palindrome by adding characters in front of it. ...
- poj 3280 Cheapest Palindrome ---(DP 回文串)
题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...
- poj3280 Cheapest Palindrome(回文串区间dp)
https://vjudge.net/problem/POJ-3280 猛刷简单dp第一天第三题. 这个据说是[求字符串通过增减操作变成回文串的最小改动次数]的变体. 首先增减操作的实质是一样的,所以 ...
- bzoj 3768: spoj 4660 Binary palindrome二进制回文串
Description 给定k个长度不超过L的01串,求有多少长度为n的01串S满足: 1.该串是回文串 2.该串不存在两个不重叠的子串,在给定的k个串中. 即不存在a<=b<c<= ...
- LeetCode Valid Palindrome 有效回文(字符串)
class Solution { public: bool isPalindrome(string s) { if(s=="") return true; ) return tru ...
随机推荐
- JQuery在iframe中实现 点击后选中当前栏目的样式
二级或者三级折叠菜单参考http://www.cnblogs.com/qigege/p/5178947.html <script type="text/javascript" ...
- 读取iis日志到sql server
using Fasterflect; using System; using System.Collections.Generic; using System.Data.SqlClient; usin ...
- IOS_问题: Xcode8 安装KSImageName插件, 编代码就崩了
Xcode 8之后, KSImageName插件就不能用了,如果安装了,就会导致一写英文代码Xcode 就崩了. 解决方法: 把这个插件删除,重启了一下xcode就可以了, 如果重启没用, 可以尝试下 ...
- Informix 物联网应用示例(转)
相关概念 MQTT 是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务.MQTT 是专门针对物联网开发的轻量级传输协议.MQ ...
- extjs的combobox的用法
可以用javascript的数组作为数据源,也可以用json作为数据源: 1.用javascript数组 var CountryCode = [ ['93','Afghanistan(93)'], [ ...
- MyEclipse反编译Class文件
对于需要查看Java Class文件源码的筒子们来说,必须在项目中导入Java源码才能查看Class文件的具体实现,这不仅十分的麻烦,因为有时我们并不可以获得Class文件对应的Java源码.今天就给 ...
- Legacy安装win7和Ubuntu14.04双系统
Legacy安装win7和Ubuntu14.04双系统 安装环境 Legacy启动模式(传统引导) 笔记本已安装win7 硬盘启动顺序为: U盘 硬盘 光驱 安装方法 制作U盘启动盘 在Ubuntu官 ...
- HDU3887 DFS序+ 线段树
查询树上某个节点的子节点的标号小于其标号的数目. 一个trick是建立线段树之后,从标号小的向标号大的来做更新. 1: #include <cstdio> 2: #include < ...
- win下php5.5.12装不上memcache扩展
WAMP这个集成环境里,php目录下有个php.ini,apache/bin下也有一个php.ini,环境使用的是apache下的,改apache
- iOS常见问题(5)
一.注意将之前storyboard中控制器删除之后,拖入一个新的控制器的时候,stroyboard中控制器的class也要重新填入自己想要展示的控制器,告诉stroyboard去加载哪个控制器. 二. ...