【Leetcode】Valid Palindrome
来源:互联网 发布:windows loader win8 编辑:程序博客网 时间:2024/06/17 23:25
题目:
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.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
翻译:
给定一个字符串,检测它是否是回文对称的,只考虑其中字母与数字的字符。
例如”A man, a plan, a canal: Panama”是回文对称的,”race a car”不是。
提示:你考虑过字符串可能是空的情况吗?这是一个面试中应该问出的好问题。为了处理这个问题,我们假定空串是回文对称的。
分析:
直接遍历比较是很困难的,我们需要先进行过滤(大写转小写)。过滤后只要将前后对应位置的字符直接比较就可以了,这里只需要用到整个字符组一般长度的循环。过程中要注意有的时候会涉及char和int的强转。当然用正则匹配也是一个很好的思路。
public class Solution { public boolean isPalindrome(String s) { char[] charArr=s.toCharArray(); List<Integer> list=new ArrayList<>(); int fix='a'-'A'; for(char c:charArr){ if((c>='a'&&c<='z')||(c>='0'&&c<='9')){ list.add((int)c); }else if(c>='A'&&c<='Z'){ list.add(c+fix); } } int size=list.size(); for(int i=0;i<size/2;i++){ if(list.get(i)!=list.get(size-1-i)){ return false; } } return true; }}
orpublic static boolean isPalindrome(String s) {String regex = "([^A-Za-z0-9])";String replacement = "";s = s.replaceAll(regex, replacement);for(int i =0;i<s.length()/2;i++){if(Character.toLowerCase(s.charAt(i))==Character.toLowerCase(s.charAt(s.length()-1-i)))continue;else return false;}return true;}
C++版本:
bool isPalindrome(string s) { for (int i = 0, j = s.size() - 1; i < j; i++, j--) { // Move 2 pointers from each end until they collide while (isalnum(s[i]) == false && i < j) i++; // Increment left pointer if not alphanumeric while (isalnum(s[j]) == false && i < j) j--; // Decrement right pointer if no alphanumeric if (toupper(s[i]) != toupper(s[j])) return false; // Exit and return error if not match } return true;}
Python版本:
def isPalindrome(self, s): l, r = 0, len(s)-1 while l < r: while l < r and not s[l].isalnum(): l += 1 while l <r and not s[r].isalnum(): r -= 1 if s[l].lower() != s[r].lower(): return False l +=1; r -= 1 return TrueC++版本和Python版本主要用到了isalnum() 方法检测字符串是否由字母和数字组成,并把有效结果累加,然后再两端比较。
阅读全文
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
- Android 使用多线程来做多文件上传Or下载
- window 64/32 安装配置 eclipse+jdk+mysql+tomcat+maven
- 171111 Jupyter Notebook插入图片的4种方法
- 对类与对象的理解
- Qt--序
- 【Leetcode】Valid Palindrome
- 利用Console来调试JS程序、Console用法总结
- 详述 IntelliJ IDEA 远程调试 Tomcat 的方法
- Nginx+Flask+UWSGI
- 解决方法——分区时出现"磁盘上没有足够的空间完成此操作"
- MIT 6.006 Algorithm Lecture 6
- Qml滑动删除
- 第4章 最大子数组问题
- Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦