◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
这是一个简单的问题,描述为:
如果一个短语在将所有大写字母转换为小写字母并删除所有非字母数字字符后,向前和向后读取相同的内容,则该短语是回文。字母数字字符包括字母和数字。 给定一个字符串 s,如果它是回文则返回 true,否则返回 false。 示例1: 输入:s =“一个人,一个计划,一条运河:巴拿马” 输出:true 说明:“amanaplanacanalpanama”是一个回文。 示例2: 输入:s =“赛车” 输出:假 说明:“raceacar”不是回文。 示例3: 输入:s = " " 输出:true 解释:s 是删除非字母数字字符后的空字符串 ""。 由于空字符串向前和向后读取相同,因此它是回文。 限制: 1
在回文之后,您基本上删除所有非 alpha,然后调用降低大小写方法并进行恢复以进行比较。
使用方法和一些 reg exp 你可以用 3 行解决这个问题:
class Solution { public boolean isPalindrome(String s) { final String reduced = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase(); final String inverted = new StringBuilder(reduced).reverse().toString(); return reduced.equals(inverted); } }
运行时间:15 毫秒,比 valid palindrome 的 java 在线提交的 22.51% 快。
内存使用:44.8 mb,低于有效回文 java 在线提交的 34.15%。
作为简单而简单的问题,这应该足够了,但是为了获得更好的性能,您可以迭代并检查每个字符并根据需要删除和调整,对于这种情况,请查看 leetcode 上的 saksham 答案(如果您希望我详细解释) ,请在下面评论)。
—
就是这样!如果还有什么要讨论的,请随时发表评论,如果我错过了任何内容,请告诉我,以便我进行相应更新。
直到下一篇文章! :)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。