您的位置:首页 > 其它

leedcode做题总结,题目Valid Palindrome 2013/01/12

2014-07-15 21:19 267 查看
这道题思路很简单,把字符串拆成单个字符,过滤掉非数字字母,留下的数组从前和后同时开始比对,如果出现不同则非回文。

注意的有,题目中不区分大小写,Aa也是回文,所以判断时不能只是用char来==,还要判断差的绝对值是否为32。

还有如果while中优势需要i++的可以直接用a[i++]即可,但是要注意if的条件里不要出现两次a[i++]

还有就是记住 '0'-'9'==48-57

'A'-'Z'==65-90

'a'-'z'==97-122

还有如果不用分隔出来单词,要分隔出字符,使用charAt()比split("")好用

public static boolean isPalindrome(String s) {
int num=s.length();
char[] sa = new char[num];
int j=0;
for (int i = 0; i <num ; i++) {
if(s.charAt(i)>47&&s.charAt(i)<58) sa[j++]=s.charAt(i);
else if(s.charAt(i)>64&&s.charAt(i)<91) sa[j++]=s.charAt(i);
else if(s.charAt(i)>96&&s.charAt(i)<123) sa[j++]=s.charAt(i);
}
int i=0;
j--;

while (i<j){
if(sa[i]!=sa[j]&&Math.abs(sa[i]-sa[j])!=32) return false;
i++;
j--;
}
return true;
}


Update 2015/08/18: 上面的做法新建了一个char数组其实是没有必要的,下面的做法将所有字符判断前先转为大写不如直接用绝对值差32判断简介,同时要注意‘A’-32返回的是int 不是char

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 i = 0;
int j = s.length()-1;
while (i <= j){
if (s.charAt(i) < '0'||(s.charAt(i) > '9' && s.charAt(i) < 'A') || (s.charAt(i) > 'Z' && s.charAt(i) < 'a')
|| s.charAt(i) > 'z'){
i++;
continue;
}
if (s.charAt(j) < '0'||(s.charAt(j) > '9' && s.charAt(j) < 'A') || (s.charAt(j) > 'Z' && s.charAt(j) < 'a')
|| s.charAt(j) > 'z'){
j--;
continue;
}
int a = s.charAt(i) > 96 ? s.charAt(i) - 32: s.charAt(i);
int b = s.charAt(j) > 96 ? s.charAt(j) - 32: s.charAt(j);
if (a != b)
return false;
else {
i++;
j--;
}

}
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: