文章目录
题目类型
判断一个字符串是另一个字符串的子序列
0AAAA792. 匹配子序列的单词数
使用Map保存每种字符的下标,遍历word,遇到一个字符,用二分查找寻找大于前一个字母在s的下标的最小下标
异位词
- AAAA438. 找到字符串中所有字母异位
p,s各有一个词频数组,每遍历一个字符就去比较词频数组是否一致。 - 242. 有效的字母异位词
使用数组记录异位字符的抵消之后的个数,s的字符在相应位置增加,t相反,若最终数组全部为0,则是异位词,否则不是。
反转字符串
- $$$415. 字符串相加
对齐之后再进行求和。 也可以不对齐,遍历的过程中只要有一个字符串存在值,或进位不为0,遍历就仍然继续。
字符串排序
- *HJ26 字符串排序
Collections.sort()的时间复杂度是nlog(n)
取出是字母的字符,然后排序,遍历字符串添加非字母的字符 - *179. 最大数
两个字符串拼起来比较字典大小,拼起来能够正确区分30和3的大小,如果不拼直接使用比较字符串字典大小的方法compareTo,会出现303的结果,但事实330的拼法更大。
预处理左右下标数组
- 0AAA828. 统计子串中的唯一字符
不要去暴力计算每一个子字符串的唯一字母个数,应该计算每一种字母对最终结果的贡献。
API
子字符串的个数
对于一个字符串,以x为结尾的子字符串的个数等于这个字符x下标加上1。
由此可得出,计算出以x字母为结尾的最长子字符串就能得到所有以x结尾的子字符串的个数。
如题:467. 环绕字符串中唯一的子字符串
split(String regex, int limit)
- 如果表达式与输入的任何部分都不匹配,那么结果数组只有一个元素,即该字符串。
- “.”和“|”都是转义字符,必须得加"\\"。同理:*和+也是如此的。
- string的split方法和replace方法都是不能改变原string的
- “|”让"|"左右两侧的字符都作为分隔符
例如:String str = “abc^123#456”; str.split(“\^|#”);
"|“的含义或,效果是遇到”^"或者“#”就分割字符串。
输出:
abc
123
456
" “(两个空格)” “.split(” “,0)的结果是[” “,” "]。
String[] split(String regex)
通过使用给定表达式和limit参数为零调用双参数split方法一样。 因此,结尾的空字符串不包含在结果数组中。
String[] split(String regex, int limit)
limit参数控制应用模式的次数,因此会影响结果数组的长度。
- 如果限制为正,则模式将应用最多limit-1次,数组的长度不会超过limit次,并且数组的最后一个条目将包含超出最后一个匹配分隔符的所有输入。
- 如果限制为零,则模式将尽可能多地应用,数组可以具有任何长度,并且将丢弃尾随空字符串。
- 如果限制为负,则模式将尽可能多地应用,并且数组可以具有任何长度。
反转字符串
String没有reverse()方法,StringBuffer有。
reverse()的返回结果是StringBuffer(StringBuilder)。
String.format
String.format("%.2f",num); //生成小数点是两位的数字字符串
subtring
String substring(int beginIndex) \\返回下标从beginIndex到字符串结尾的字符串。
大小写字母转换
API:
Example.toLowerCase() \\将字符串Example的全部字符转成小写,结果是example
example.toUpperCase() \\将字符串example的全部字符转成大写,结果是EXAMPLE
- AAA520. 检测大写字母
位运算方式:
大写变小写、小写变大写 : 字符 ^= 32;
大写变小写、小写变小写 : 字符 |= 32;
小写变大写、大写变大写 : 字符 &= -33;
整型赋值给字符变量
整型可以隐式的转成字符类型,但涉及到运算就需要强制将运算结果转成字符类型,然后才能给字符变量赋值。如784.字母大小写排列
StringBuffer增删改查字符串的字符
注意s.charAt(i) 是从字符串中获取值,不能给s.charAt(i)赋值,string的字符不能修改,要修改也得转成stringbuffer或stringbuilder。
参考:709. 转换成小写字母
StringBuffer.charAt(int index) \\返回下标是index的字符。
StringBuffer.deleteCharAt(int index) \\删除下标是index的字符。
StringBuffer.insert(int offset, char c) \\在offset的位置插入某字符。
StringBuffer.setCharAt(int index, char ch) \\替换下标是index的字符。
判断字符的类型
字符判断及转换 (需要借助Character来使用方法)
如:Character.isDigit(‘2’)
static boolean isDigit(char ch) \\判断ch是不是数字类型
static boolean isLetter(char ch) \\判断ch是不是字符类型
static boolean isLetterOrDigit(char ch) \\判断ch是不是字符或数字类型
static boolean isLowerCase(char ch) \\判断ch是不是小写字母
static boolean isUpperCase(char ch) \\判断ch是不是大写字母
static char toLowerCase(char ch) \\把ch转成小写字母
static char toUpperCase(char ch) \\把ch转成大写字母
字符串与整型转换
Integer.parseInt()返回值为基本数据类型
Integer.valueOf()返回值为包装类型
可以说是一样的。
Integer.parseInt(String s)
将字符串参数解析为带符号的十进制整数。
可以忽略前导0的存在,把一个由数字构成的字符串转成整数。
Integer.parseInt(String s, int radix)
将字符串参数解析为第二个参数指定的基数中的有符号整数。
eg:
Integer.parseInt("123",16)//把123转成16进制的整数
Integer.valueOf(String s)
将字符串参数解析为带符号的十进制整数。
可以忽略前导0的存在,把一个由数字构成的字符串转成整数。
Integer.valueOf(String s, int radix)
将String转换成Integer,String如果为Null或“”都会报错。
s - 包含整数的 String 。
radix - 使用的进制,把字符串转成什么进制的整数。
String.valueOf(int i)
返回表示i的字符串。
字符串比较compareTo(String anotherString)
public int compareTo(String anotherString)
例:
a.compareTo(b) //字典顺序比较a,b
按字典顺序比较两个字符串。 如果此String对象按字典顺序排在参数字符串之前,则结果为负整数。 如果此String对象按字典顺序跟随参数字符串,则结果为正整数。 如果字符串相等,结果为零;
如果两个字符串没有不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前。