算法题总结 —— 字符串
本文用于总结字符串相关题目的所用方法。
1. 哈希表
主要作用:统计字母出现个数。 当题目中出现与字母个数相关的题目时,我们可以选择哈希表。经常会用到 HashMap 中的 put与get函数,注意当key相同的时候,HashMap是可以更新value的。
有时对两个字符串进行比较时,我们可能会定义多个哈希表 (比如 面试题 01.02. 判定是否互为字符重排)。
2. StringBuilder和StringBuffer
有时需要生成一个字符串,并且要对该字符串本身进行操作时(比如添加等),用StringBuilder和StringBuffer可以更好的解决问题。 面试题 01.06. 字符串压缩 就用到了StringBuffer。
3. 辅助数组
当对题目的一个字符串进行变动时,我们可以用辅助数组(char[]) 来记录字符串的变化,在修改完毕后,根据该辅助数组生成一个新的字符串返回 (使用 new String(char[],begin,end) 语句) 比如 面试题 01.03. URL化 就需要用一个辅助数组 把空格改成 “%...” 的样式。 剑指 Offer 58 - II. 左旋转字符串 同样也使用到了辅助数组,来对字符串进行拆分(因为Java中的String是不可变了,只能通过数组来进行拆分)。
4. 寻找规律
这个实际上不算是方法,但是做题的时候还经常遇到:比如回文串出现的相同字母次数必须全部是偶数次 或者 奇数次字母只能出现一次等等。 面试题 01.05. 一次编辑 中也需要找到能够一次编辑的规律:根据长度的不同,最多能够有几个字母不相同等等。
5. 子串
有些时候,字符串经过某些操作后,会变成题目给出字符串的子串,比如 面试题 01.09. 字符串轮转 中,操作后的字符串为b,原字符串为a,b就是 a + a 的子串。我们只需要调用字符串的contains方法,就可以知道是否为子串。

浙公网安备 33010602011771号