ItIron2021
Javascript
终於最後一天啦,实际上写了几篇之後我就发现这主题没有我想像中的好发挥,实际在模拟面试的活动中我可以针对同学的回答进行补充或是追问,也可以比较清楚知道我需要再多讲解哪些部份的概念,不过当转换成单向的文字时就没有这麽自由了,许多篇文章现在回头看起来都觉得讲得过浅,有很大的进步空间,之後如果要做这样的活动纪录我会再想其他办法的!
现在就让我们来看最後一题吧!
请写一个简单的函数检测输入的字串是否为回文(palindrome)
最後一张的防雷图!
有在刷leetcode的朋友对这题目一定不陌生,我记得它甚至分成4个题目让你挑战,总之经过前面的锻链,我想你知道你需要先厘清问题!你可能会追问以下的问题
很好、很全面的追问,因此面试官替你进一步说明了题目。
所谓回文是指该字串从头到尾、从尾到头都是相同的文字排序,在这次的情境中,请你忽略大小写以及特殊文字(也就是除了a-z、数字以及_之外的字元),最终回传一个Boolean判断传入的字串是否为回文
举几个例子来看
isPalindrome('I am a dog') // false 正反排序不相同
isPalindrome('I am a i') // true 不管大小写、空格被忽略,正反都是iamai
isPalindrome('I @@am a i@') // true 特殊字元也被忽略,同上
isPalindrome('') // true
了解之後我们就可以开始动手了,很明显我们需要采取几个步骤
我们一步步来吧! 第一步我们就不说明了,先转为大小写这很容易
str = str.toLowerCase()
这应该是这几个步骤中比较困难的一个,但很多时候你在遇到这样的题目时,你的程序码不一定要会动,关键其实在於你能不能清楚的表达你的解题思路,排除掉特殊字元的方法有很多,最土法炼钢的自然是自己定义後再利用回圈排除罗!
const validElements = 'abcdefghijklmnopqrstuvwxyz0123456789_'.split("")
const filteredStr = str.split("").filter(item => validElements.includes(item)).join("")
当然,你也可以用正规表达式,题目具体到不用正规表达式都有些奇怪了?
str = str.replace(/\W/g, '').toLowerCase();
最後一个步骤你可以选用回圈比较头尾是不是都相同,一旦不相同就回传false,是个好办法!
function isPalindrome(str) {
str = str.toLowerCase()
const validElements = 'abcdefghijklmnopqrstuvwxyz0123456789_'.split("")
const filteredStr = str.split("").filter(item => validElements.includes(item)).join("")
// 加入这边
for (let i = 0; i < Math.floor(filteredStr.length / 2); i++) {
if (filteredStr[i] !== filteredStr[filteredStr.length - i -1]) {
return false
}
}
return true
}
或是善用原本Array.reverse()方法,配合之前说的正规表达式就会是这样
function isPalindrome(str) {
str = str.replace(/\W/g, '').toLowerCase();
return (str == str.split('').reverse().join(''));
}
palindrome、正规表达式
本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!
>>: D35 - 用 Swift 和公开资讯,打造投资理财的 Apps { 台股申购功能扩充 - 日历 }
今天我们要自己假订一个配对情境,来做一个比官方稍微复杂一点点的 Demo,并且透过这个模拟情境的实践...
Linode 是提供多样化、不同规格的 VPS 服务器提供商。你可以藉由一个 Linode 帐号管理...
正规化 缩小资料的呈现比例 可使数值呈现在一定的范围内 使我们在训练模型时,增加梯度下降的容易度并提...
Istio 是当前最流行的服务网格实现 ,它是在 Kubernetes 的基础上开发的,它跟 Kub...
这不是第一次 我是阿姜,今年三月开始在五倍红宝石 Astro Camp 学习程序相关技能,期间接触了...