每日打卡:验证回文串
2020-07-18 04:22
148 查看
打卡: 从先序遍历还原二叉树
心情
你觉得你的心中还有爱么?
有,爱国家爱人民。
那你能为此做到什么?
我什么都做不到。
终究还是没有爱……
读题
leetcode: 125. 验证回文串
描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。本题中,我们将空字符串定义为有效的回文串。
测试用例:
输入: “A man, a plan, a canal: Panama”
输出: true
输入: “race a car”
输出: false
看起来挺简单嘛,双指针循环就能处理
思路
1:循环字符串,第一个和最后一个比较
实现
public boolean isPalindrome(String s) { if (s == null) { return false; } //只考虑数字和字母,忽略大小写 int i = 0, j = s.length() - 1; char[] chars = s.toCharArray(); while (i < j) { //i从前往后 while (!isNumOrChar(chars[i]) && i < j) { i++; } //j从后往前 while (!isNumOrChar(chars[j]) && j > i) { j--; } if (chars[i] == chars[j] || (chars[i] >= 'A' && chars[j] >= 'A' && ((chars[i] + 32) == chars[j] || (chars[j] + 32) == chars[i]))) { i++; j--; continue; }else{ return false; } } return true; } //判断char是不是数字字符或者字母 public boolean isNumOrChar(char c) { return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); }
简单明了,就是判断是不是数字字母有点傻。
提交
执行用时倒是意料之中,内存消耗就有点离谱了。
改进一下,依然无法提升内存消耗的排名,反而执行时间多了:
public boolean isPalindrome(String s) { if (s == null) { return false; } //只考虑数字和字母,忽略大小写 int i = 0, j = s.length() - 1; while (i < j) { //i从前往后 while (!Character.isLetterOrDigit(s.charAt(i)) && i < j) { i++; } //j从后往前 while (!Character.isLetterOrDigit(s.charAt(j)) && j > i) { j--; } if (Character.toLowerCase(s.charAt(i)) == Character.toLowerCase(s.charAt(j))) { i++; j--; continue; }else{ return false; } } return true; }
有意思的解法
public boolean isPalindrome(String s) { //大写转小写,去掉其他字符 s = s.toLowerCase().replaceAll("[^0-9a-z]", ""); //翻转字符串 String t = new StringBuffer(s).reverse().toString(); //比较字符串在常量池中的值 return s.intern() == t.intern(); }
参考官方题解加上其他用户的解答,我将这种解法给精简了一下,3行就解决了。
相关文章推荐
- leetcode(js)-每日一练之 验证回文串Ⅱ 题库编号680
- leetcode(js)-每日一练之 验证回文串 题库编号125
- LeetCode每日一题--验证回文串
- 每日学习总结:DropDownList是否已选择验证、存储过程参数为sql字符串问题、将截断字符串或二进制数据。\r\n语句已终止
- 51单片机 每日打卡
- 基于JavaScript实现每日签到打卡轨迹功能
- 打卡记录根据排班表每人每日排班上下班时间自动获取结果打卡记录是属于那是区间
- 牛客网每日打卡-Java基础-20160326
- Python每日一记21>>>交叉验证
- 【每日打卡】Day10:第十届蓝桥杯 迷宫 C++实现
- 每日打卡 | 5月9日教资&教招每日一练
- 【每日打卡】Day24:下一个排列 C++实现
- 验证回文串(忽略空格和标点以及大小写)
- 从0打卡leetcode之day 6--最长回文串
- [WinForm每日一帖] 如何验证Editor中输入的数据合法性
- 【leetcode系列】125. 验证回文串
- LeetCode 125.验证回文串
- [Leetcode 每日一题] 98. 验证二叉搜索树
- LeetCode解析---125.验证回文串
- PMP每日打卡之—第五章思维导图小结