当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章

单线程上使用StringBuilder获得效率更高

多线程中使用StringBuffer保证线程安全

很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作 可以用快慢指针来消除字符串中多余的空格

子字符串问题

分割字符串时,考虑切割的方法,分割线在移动,比如a,a,b,则先分割出a,再是a,再是b,然后是aa,b,最后是aab

substring()中的两个参数是左闭右开。

分割子字符串可以在原地操作,通过substring的拼接。

子字符串要求是连续的,而子序列不要求是连续的(子序列就是可以对原字符串进行删除或者不删除,不改变原字符串的字符之间的相对顺序)子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。 KMP

  • 前缀:是指不包含最后一个字符的所有以第一个字符开头的连续子串。
  • 后缀:是指不包含第一个字符的所有以最后一个字符结尾的连续子串。
  • 前缀表:记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。

next:前缀表减一和不减一都可以,只是具体实现起来的不同。

字符串之间的比较要用.equals()

回文子串可以使用双指针法,通过选择一个元素或两个元素为中心点,然后从中心往外扩散的解法