java 中String类相关内容
String类
String
类作形参时,是重新开辟一段空间,值和原来实参相同;- ∴ \therefore ∴函数结束时,该空间会被收回
因此可以选择转换成char[] ch
数组,通过数组地址传递、修改字符串
note:
chars.toString()
方法返回的是字符数组的地址,因此不能实现将char[]
转换从String
的目标- 可以选择使用
String.valueOf(ch)
实现
StringBuilder类
String
内容是不可变的
StringBuilder
内容是可变的,常用来完成翻转、拼接等等操作
常用API:
.append(x)
:添加数据.reverse()
:翻转.toString()
:将StringBuilder转换成String.length()
:长度setCharAt(int i ,char c)
:将第i
个字符修改为char c
剑指Offer58-II
题目链接
将部分字符串放到末尾
思路:
- 跟Leetcode151有点类似
- 通过翻转一部分字符串 & 再翻转整体的方式完成
- 画草稿,找规律
- 先翻转
[0, n)
个字符串 - 再翻转
[n, len)
个字符串 - 最后翻转整个字符串
- 先翻转
class Solution {
public String reverseLeftWords(String s, int n) {
char[] ch = s.toCharArray();
reverse(ch, 0, n - 1);
reverse(ch, n, ch.length - 1);
reverse(ch, 0, ch.length - 1);
return String.valueOf(ch);
}
public void reverse(char[] ch, int start, int end) {
while (start < end) {
char t = ch[start];
ch[start] = ch[end];
ch[end] = t;
++start;
--end;
}
}
}
KMP算法
KMP解决:当主串中第i个字符与模式串中第j个字符“失配”时,主串中第i个字符应与模式中哪个比较
![](https://i-blog.csdnimg.cn/blog_migrate/35cdfbf4da88a259196646c111786b51.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/60fc00f776b67678586ac60eabc69151.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/46284b8604857f53e2ec8ee203e13250.jpeg)
leetcode 28
题目链接
KMP经典题目
思路:
待补充
leetcode 459
题目链接
KMP应用
思路:
待补充
双指针
leetcode相关题目汇总
- 27、26、283、844、977
- 344
- 541
- 剑指offer 05、15、18、206、142、344
- 151
- 19、160