标签:return 验证 res Character str Java true 回文
1.问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
2.求解
筛选+双指针
代码如下
/*
执行用时:3 ms, 在所有 Java 提交中击败了93.67% 的用户
内存消耗:38.6 MB, 在所有 Java 提交中击败了75.06% 的用户
*/
public boolean isPalindrome(String s) {
if(" ".equals(s)){
return true;
}
List<Character> list = new ArrayList<>();
char[] str = s.toCharArray();
for(char c : str){
if(c >= '0' && c <= '9'){
list.add(c);
}
if(c >= 'A' && c <= 'Z'){
list.add((char)(c + 32));
}
if(c >= 'a' && c <= 'z'){
list.add(c);
}
}
int i = 0, j = list.size() - 1;
while(i < j){
if(list.get(i) != list.get(j)){
return false;
}
i++;
j--;
}
return true;
}
ps:java中的Character
类有个isLetterOrDigit
方法,将对字母和数字字符返回true
使用它可以替代冗长的ASCII判断,可将原答案改为如下:
for(char c : str){
if(Character.isLetterOrDigit(c)){
list.add(Character.toLowerCase(c));
}
}
筛选+翻转
代码如下
/*
执行用时:5 ms, 在所有 Java 提交中击败了49.48% 的用户
内存消耗:38.5 MB, 在所有 Java 提交中击败了84.90% 的用户
*/
public boolean isPalindrome(String s) {
if(" ".equals(s)){
return true;
}
StringBuilder res = new StringBuilder();
char[] str = s.toCharArray();
for(char c : str){
if(Character.isLetterOrDigit(c)){
res.append(Character.toLowerCase(c));
}
}
StringBuilder res_rev = new StringBuilder(res).reverse();
return res.toString().equals(res_rev.toString());
}
双指针
代码如下
/*
执行用时:3 ms, 在所有 Java 提交中击败了93.67% 的用户
内存消耗:38.6 MB, 在所有 Java 提交中击败了71.16% 的用户
*/
public boolean isPalindrome(String s) {
if(" ".equals(s)){
return true;
}
char[] str = s.toCharArray();
int i = 0, j = str.length - 1;
while(i < j){
while(i < j && !Character.isLetterOrDigit(str[i])){
i++;
}
while(i < j && !Character.isLetterOrDigit(str[j])){
j--;
}
if(Character.toLowerCase(str[i]) != Character.toLowerCase(str[j])){
return false;
}
i++;
j--;
}
return true;
}
标签:return,验证,res,Character,str,Java,true,回文 来源: https://www.cnblogs.com/g9420/p/14042983.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。