LeetCode - 125. Valid Palindrome
2016-07-04 11:39
246 查看
关于Palindrome的问题,一般可以用两类解法,第一类是使用Stack反向存储内容,然后再和正向的比较;第二类是使用两个指针,一开始一个设置在开头,一个设置在尾部,依次进行比较。这道题目另外有些要求,就是如不不是数字或字母的话就跳过,所以正好可以使用Java内置的Character.isLetterOrDigit()函数进行判断,如果不是的话则head++/tail--,但是注意在这种情况下要使用continue跳出循环而不是继续比较,因为可能连续的非数字或字母存在,在这种情况下如果继续比较的话会出现错误。另外由于这道题目要求的是不顾大小写,所以在比较前要使用Character.toLowerCase()转换成小写的进行比较。时间复杂度为O(n),代码如下:
public class Solution {
public boolean isPalindrome(String s) {
if(s.isEmpty()) return true;
int head = 0;
int tail = s.length() - 1;
int cHead;
int cTail;
while(head < tail){
cHead = s.charAt(head);
cTail = s.charAt(tail);
if(!Character.isLetterOrDigit(cHead)){
head++;
continue;
}
if(!Character.isLetterOrDigit(cTail)){
tail--;
continue;
}
if(Character.toLowerCase(cHead) != Character.toLowerCase(cTail)) return false;
head++;
tail--;
}
return true;
}
}
知识点:
1. Palindrome问题的两类解法:使用Stack或者双指针
2. 记住Java中一些常用的处理char的方法,Character.isLetterOrDigit(), Character.toLowerCase(), Character.toUpperCase()
public class Solution {
public boolean isPalindrome(String s) {
if(s.isEmpty()) return true;
int head = 0;
int tail = s.length() - 1;
int cHead;
int cTail;
while(head < tail){
cHead = s.charAt(head);
cTail = s.charAt(tail);
if(!Character.isLetterOrDigit(cHead)){
head++;
continue;
}
if(!Character.isLetterOrDigit(cTail)){
tail--;
continue;
}
if(Character.toLowerCase(cHead) != Character.toLowerCase(cTail)) return false;
head++;
tail--;
}
return true;
}
}
知识点:
1. Palindrome问题的两类解法:使用Stack或者双指针
2. 记住Java中一些常用的处理char的方法,Character.isLetterOrDigit(), Character.toLowerCase(), Character.toUpperCase()
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解