[LeetCode]Valid Palindrome
2015-08-11 08:37
288 查看
第二遍,解题思路:
1,设定两个指针 i 和 j,分别指向s的开头和结尾,然后i 和 j相向而行,
2,其间跳过非字符数字字符,
3,比较大小时做一个大小写转换
第一遍,解题思路:
1,第一遍遍历,把所有的非alpha numeric的字符去掉;
2,第二遍遍历,所有大写变小写;
3,边界条件:str是否为空
4,第三遍遍历,str[i] == str[len-i-1];
1,设定两个指针 i 和 j,分别指向s的开头和结尾,然后i 和 j相向而行,
2,其间跳过非字符数字字符,
3,比较大小时做一个大小写转换
public class Solution { public boolean isPalindrome(String s) { if (s.length() == 0) return true; // or false, it's depends on interviewer int i = 0; int j = s.length()-1; while(i < j){ while(i < j && !Character.isLetterOrDigit(s.charAt(i))) i ++; while(i < j && !Character.isLetterOrDigit(s.charAt(j))) j --; if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))){ return false; } i++; j--; } return true; } }
第一遍,解题思路:
1,第一遍遍历,把所有的非alpha numeric的字符去掉;
2,第二遍遍历,所有大写变小写;
3,边界条件:str是否为空
4,第三遍遍历,str[i] == str[len-i-1];
class Solution { public: bool isPalindrome(string s) { removeNonAlpha(s); toLower(s); if (s.length() == 0){ return true; } for (int i = 0; i < s.length()/2; ++i){ if (s[i] != s[s.length()-i-1]) return false; } return true; } void removeNonAlpha(string &s){ string::iterator it = s.begin(); while(it != s.end()){ if(!isalpha(*it) && !isdigit(*it)){ it = s.erase(it); continue; } it ++; } } void toLower(string &s){ string::iterator it = s.begin(); while(it != s.end()){ if (isupper(*it)){ *it = *it - 'A' + 'a'; } it++; } } };
相关文章推荐
- 图结构练习——判断给定图是否存在合法拓扑序列
- scikit-learn(工程中用的相对较多的模型介绍):2.3. Clustering(可用于特征的无监督降维)
- 软件设计师自我修炼1:如何让用户对软件产生依赖
- android ContentProvider的使用
- 杭电ACM(HDUOJ)试题分类
- MeasureSpec学习
- 动态规划之背包问题
- 计算组合数C(n,m)
- Property list 概述
- 装饰者设计模式
- nyoj32组合数(dfs模板)
- 在Java中辅助报表工具展现json
- 轻松入门React和Webpack
- 线程(2)-----线程池
- 编写Socket客户端和服务器程序,客户端发送一个包含多个数字的字符串给服务器,服务器排序后返回给客户端,要求服务器能连续不断地服务。
- tableView联动
- HDU - 3715 Go Deeper (二分 + 2-SAT)
- linux下的解压命令详解
- 抓包函数-pcap_next
- 测量平差之间接平差