字符串在算法面试中,单独考察的机会并不多,同样倾向于和一些经典算法(后面会讲的)结合来体现区分度。步子不能跨太大,不然容易扯着x。本节我们照样是先解决只需要数据结构知识做基础就可以解决的字符串问题。
在讲题之前,我首先要给大家点拨两个字符串相关的“基本算法技能”。这两个技能偶尔也会单独命题,但整体来看在综合性题目中的考察频率较高,需要大家着重熟悉、反复练习和记忆,确保真正做题时万无一失。
# 基本算法技能
# 反转字符串
在 JS 中,反转字符串我们直接调相关 API 即可,相信不少同学都能手到擒来:
// 定义被反转的字符串
const str = 'juejin'
// 定义反转后的字符串
const res = str.split('').reverse().join('')
console.log(res) // nijeuj
@前端进阶之旅: 代码已经复制到剪贴板
(这段代码需要你非常熟悉,一些公司一面为了试水,有时会单独考这个操作)。
# 判断一个字符串是否是回文字符串
回文字符串,就是正着读和倒着读都一🐱一样的字符串,比如这样的:
'yessey'
@前端进阶之旅: 代码已经复制到剪贴板
结合这个定义,我们不难写出一个判定回文字符串的方法:
function isPalindrome(str) {
// 先反转字符串
const reversedStr = str.split('').reverse().join('')
// 判断反转前后是否相等
return reversedStr === str
}
@前端进阶之旅: 代码已经复制到剪贴板
同时,回文字符串还有另一个特性:如果从中间位置“劈开”,那么两边的两个子串在内容上是完全对称的。因此我们也可以结合对称性来做判断:
