ARTS打卡:第十七周
每周完成一个ARTS:
- Algorithm:每周至少做一个 leetcode 的算法题
- Review:阅读并点评至少一篇英文技术文章
- Tip:学习至少一个技术技巧
- Share:分享一篇有观点和思考的技术文章
Algorithm
125. Valid Palindrome(Easy)
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: “A man, a plan, a canal: Panama”
Output: trueExample 2:
Input: “race a car”
Output: false
题意
给定一个字符串,判断它是否是回文,只考虑字母数字字符且忽略大小写。
注意:为了解决这个问题,我们将空字符串定义为有效的回文。
解题思路(1)
这题很简单,根据题意,得出以下两个限制条件:
- 只考虑字母数字字符且忽略大小写
- 将空字符串定义为有效的回文
那么解法就显而易见了:
- 通过正则表达式过滤掉除字母数字之外的字符,并将字母全部转为小写字母
- 将字符串翻转后,进行比较即可
代码实现(1)
1 | class Solution { |
运行结果和复杂度分析(1)
运行结果:
Runtime: 18 ms, faster than 23.43% of Java online submissions for Valid Palindrome.
Memory Usage: 37.8 MB, less than 96.94% of Java online submissions for Valid Palindrome.
复杂度分析:
暂未清楚如何分析….🕊
解题思路(2)
借鉴散列表的思想,换一个解题角度出发(嘿嘿嘿,是不是发现跟上周的解题思路类似呢😜):
- ASCII 码表加上拓展集共256个字符,所以我们可以定义一个长度为256的整形数组来模拟散列表,下标为字符的值,数组的值用于标识字符。
- 字母或数字字符对应数组存储的值,是唯一的,其余字符皆为0,这样就不用过滤除字母或数字之外的字符了。
- 头尾指针遍历比较
结合代码,更容易理解哟(^U^)ノ~YO
代码实现(2)
1 | class Solution{ |
运行结果和复杂度分析(2)
结果:
Runtime: 1 ms, faster than 100.00% of Java online submissions for Valid Palindrome.
Memory Usage: 37.7 MB, less than 98.83% of Java online submissions for Valid Palindrome.
时间复杂度:O(n)
空间复杂度:O(n)
Review
本周阅读的是:Java (JVM) Memory Model – Memory Management in Java
作者在文中通俗的介绍了:Java内存模型、Java内存管理、Java 垃圾回收、Java 内存监控的命令与工具以及关于垃圾回收调优的建议,值得小伙伴们一看。
部分笔记如下:
Tip
Share
本周分享:从单体应用到微服务的开发旅程