字符串题目解析
字符串普遍认为它是不可变的,所以如果单纯考察字符串,能涉及到的知识点未免太过狭隘了,难道面试的时候算法题目考些诸如:字符串切片求子串、两个字符串判断是否相等、字符串倒序输出?醒醒,别做梦了,但凡喝酒配点花生米,也不至于醉成这样啊…
力扣上的字符串题目有536道,但这个分类是有问题的,它将所有入参为字符串的题目都分到的这个类型里面,但其实几乎所有字符串的题目都是通过以下几类来完成的,让我们来仔细划分下:
数组
由于字符串是有字符组成的,而算法题中的字符串一般都只会包含26个英文字母,更为简单的一般会告诉你仅包含大/小写字母,那么在判断字符串中包含的英文字母数量时,可以使用一个长度为26的数组根据下标0-25的value值 对应 a-z个字符在字符串中出现的次数。
通过这种方式可以解决很大一部分字符串的题目。
栈
针对括号匹配、路径拆分等字符串题目,使用栈的方式简直手到擒来闭眼AC。当然这里要说明下在Python中,是没有Stack这个数据类型的,它是通过list的append和pop实现栈的压入弹出。
哈希表
哈希表在字符串中也是有一定地位的,我们在解题时可以使用哈希表快速完成一些匹配的关系,比如罗马数字转整数中的循环比较:
tmp = { “I”: 1,
“V”: 5,
“X”: 10,
“L”: 50,
“C”: 100,
“D”: 500,
“M”: 1000}
亦或者是判断字符串同构等的题目,也可以通过哈希表的方式轻松解题,这里举例两道简单题目用来了解这种解题方式。
有兴趣的朋友可以先提前去看看:
205.同构字符串
290.单词规律
队列
队列由于其先进先出的特点,可以在循环匹配中帮助我们通过枚举的方式完成部分字符串的题目,比如 17. 电话号码的字母组合
其他类型的还有很多,这里就不逐一介绍了,通过这些例子只是想告诉大家,数据结构是互通的,我们可以通过数据结构的转换来完成解题。并且算法和数据结构不是强绑定的,一个算法在不同的数据结构中经常是通用的。
字符串方法
上面看到由于我们需要将字符串转化为其他的数据类型,那么不可避免的需要用到一些方法。在这里快速介绍下吧。
获取字符串长度
Java: someString.length()
Python: len(some_string)
判断字符串是否相等
Java: someString.equals(otherString)
Python: some_string == other_string
获取字符串的子串
**Java:**someString.substring(begin,end)
Python: some_string [begin: end:step]
拆分字符串
**Java:**String[] arr = someString.split(regex);
Python: some_string.split(regex,maxsplit)
获取下标
Java: indexOf() lastIndexOf()
Python: python 只有index()
大小写转换
Java: toLowerCase() toUpperCase()
Python: lower() upper()
Java返回指定下标的字符时,需要使用charAt(),Python无需如此。