字符串String-题目总结

这篇博客总结了字符串处理的各种题目和API使用,包括判断子序列、异位词检查、字符串反转、排序、预处理下标数组等。同时,详细介绍了字符串API,如split、substring、反转方法、大小写转换以及整型与字符串之间的转换。此外,还探讨了字符串匹配的KMP算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目类型

判断一个字符串是另一个字符串的子序列

0AAAA792. 匹配子序列的单词数
使用Map保存每种字符的下标,遍历word,遇到一个字符,用二分查找寻找大于前一个字母在s的下标的最小下标

异位词

反转字符串

151. 颠倒字符串中的单词

  • $$$415. 字符串相加
    对齐之后再进行求和。 也可以不对齐,遍历的过程中只要有一个字符串存在值,或进位不为0,遍历就仍然继续。

字符串排序

  • *HJ26 字符串排序
    Collections.sort()的时间复杂度是nlog(n)
    取出是字母的字符,然后排序,遍历字符串添加非字母的字符
  • *179. 最大数
    两个字符串拼起来比较字典大小,拼起来能够正确区分30和3的大小,如果不拼直接使用比较字符串字典大小的方法compareTo,会出现303的结果,但事实330的拼法更大。

预处理左右下标数组

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对象按字典顺序跟随参数字符串,则结果为正整数。 如果字符串相等,结果为零;
如果两个字符串没有不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前。

字符串匹配 KMP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值