首页 / 51CTO / 正文

字符串操作大全:面试准备和日常编码所需一文打尽

51CTO 2020-11-10 04:34:36

字符串是一系列字符,由常数或变量构成。它是编程语言中必不可少的数据类型。本文中将重点关注JavaScript字符串操作,但其原理和算法也可应用于其他语言。

参加技术面试时,面试官常常会关注以下内容:

  • 编程技术
  • 语言能力
  • 解题技巧

本文不仅可以让你成功通过技术面试,对日常编码也很有用。代码要点格式中,我们列出了JavaScript字符串的几点重要特性,这是编程技能的基础。其中包括存在了20年的属性和方法,也涵盖ES2021中的特性。如有不清楚之处,可以有针对性地查漏补缺。JavaScript编程语言可以解决许多应用问题。这些算法或其变体,经常出现在真实的面试场景中。

字符串操作大全:面试准备和日常编码所需一文打尽

字符串属性和方法

字符串用于表示和操作字符序列。字符串属性和方法有很多。以下是可供参考的代码示例,包括ES2020中的“matchAll”和ES2021中的“replaceAll”。

 

映射和集合

对于字符串操作,我们需要在某处存储中间值。数组、映射和集合都是需要掌握的常用数据结构,本文主要讨论集合和映射。

(1) 集合

Set是存储所有类型的唯一值的对象。以下是供参考的代码示例,一目了然。

 

(2) 映射

映射是保存键值对的对象。任何值都可以用作键或值。映射会记住键的原始插入顺序。以下是供参考的代码示例:

 

应用题

面试中有英语应用题,我们探索了一些经常用于测试的算法。

(1) 等值线

等值线图是指所含字母均只出现一次的单词。

  • dermatoglyphics (15个字母)
  • hydropneumatics (15个字母)
  • misconjugatedly (15个字母)
  • uncopyrightable (15个字母)
  • uncopyrightables (16个字母)
  • subdermatoglyphic (17个字母)

如何写一个算法来检测字符串是否是等值线图?有很多方法可以实现。可以把字符串放在集合中,然后自动拆分成字符。由于集合是存储唯一值的对象,如果它是一个等值线图,它的大小应该与字符串长度相同。

 

以下是验证测试:

 

(2) 全字母短句

全字母短句是包含字母表中所有26个字母的句子,不分大小写。理想情况下,句子越短越好。以下为全字母短句:

  • Waltz, bad nymph, for quick jigs vex. (28个字母)
  • Jived fox nymph grabs quick waltz. (28个字母)
  • Glib jocks quiz nymph to vex dwarf. (28个字母)
  • Sphinx of black quartz, judge my vow. (29个字母)
  • How vexingly quick daft zebras jump! (30个字母)
  • The five boxing wizards jump quickly. (31个字母)
  • Jackdaws love my big sphinx of quartz. (31个字母)
  • Pack my box with five dozen liquor jugs. (32个字母)
  • The quick brown fox jumps over a lazy dog. (33个字母)

还有很多方法可以验证给定的字符串是否是全字母短句。这一次,我们将每个字母(转换为小写)放入映射中。如果映射大小为26,那么它就是全字母短句。

 

以下是验证测试:

 

(3) 同构字符串

给定两个字符串s和t,如果可以替换掉s中的字符得到t,那么这两个字符串是同构的。s中的所有字符转换都必须应用到s中相同的字符上,例如,murmur与tartar为同构字符串,如果m被t替换,u被a替换,r被自身替换。以下算法使用数组来存储转换字符,也适用于映射。

 

以下是验证测试:

 

(4) 相同字母异构词

相同字母异构词是通过重新排列不同单词的字母而形成的单词,通常使用所有原始字母一次。从一个池中重新排列单词有很多种可能性。例如,cat的相同字母异构词有cat、act、atc、tca、atc和tac。我们可以添加额外的要求,即新单词必须出现在源字符串中。如果源实际上是actually,则结果数组是[“act”]。

 

以下是验证测试:

 

(5) 回文

回文是从前往后读和从后往前读读法相同的单词或句子。有很多回文,比如A,Bob,还有 “A man, a plan, a canal — Panama”。检查回文的算法分为两种。使用循环或使用递归从两端检查是否相同。下列代码使用递归方法:

 

以下是验证测试:

 

回文面试题有很多不同的变形题,下面是一个在给定字符串中寻找最长回文的算法。

 

以下是验证测试:

 

熟能生巧。享受编码!

【责任编辑:赵宁宁 TEL:(010)68476606】

时讯快报

5.5亿用户的选择

立即打开