代码随想录算法训练营,9月5日 | 151.翻转字符串里的单词,卡码网:55.右旋转字符串,28. 实现 strStr(),459.重复的子字符串
151.翻转字符串里的单词
题目链接:151.翻转字符串里的单词
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰翻转字符串里的单词
日期:2024-09-05
想法:要求:1.不使用Java内置方法实现;思路:1.去除首尾以及中间多余空格。2.反转整个字符串;3.反转各个单词(快慢指针O(n))
Java代码如下:
class Solution {
public char[] removeExtraSpaces(char[] chars) {
int slow = 0;
for(int fast = 0; fast < chars.length; fast++){
if(chars[fast] != ' '){//删所有空格
if(slow != 0) chars[slow++] = ' ';//补回空格
while(fast < chars.length && chars[fast] != ' '){
chars[slow++] = chars[fast++];
}
}
}
char[] newChars = new char[slow];
System.arraycopy(chars, 0, newChars, 0, slow);
return newChars;
}
public void reverse(char[] chars, int left, int right) {
while(left < right){
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
public String reverseWords(String s) {
char[] chars = s.toCharArray();
chars = removeExtraSpaces(chars);
reverse(chars, 0, chars.length - 1);
int start = 0;
for(int end = 0; end <= chars.length; end++){
if(end == chars.length || chars[end] == ' '){
reverse(chars, start, end - 1);
start = end + 1;
}
}
return new String(chars);
}
}
总结:end == chars.length || chars[end] == ' '注意顺序。
卡码网:55.右旋转字符串
题目链接:卡码网:55.右旋转字符串
文档讲解︰代码随想录(programmercarl.com)
日期:2024-09-05
想法:学习上一题思路,将字符串整体翻转,检查后发现,只需要再反转前n个字符,和剩下的字符结果就对了。
Java代码如下:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine());
String s = in.nextLine();
char[] chars = s.toCharArray();
int len = s.length();
reverse(chars, 0, len - 1);
reverse(chars, 0, n - 1);
reverse(chars, n, len - 1);
System.out.println(chars);
}
public static void reverse(char[] chars, int left, int right){
while(left < right){
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
}
KMP周末补。
字符串总结:
1.Java的字符串不能不增加空间直接操作,一般将其转换为char[]即可与C++匹配上
2.用双指针法实现了反转字符串,替换、删除空格操作
3.反转字符串的思路基本是先整体再局部
4.KMP:
双指针:
1.数组:移除元素。
2.链表:翻转链表,在链表中求环
3.字符串:反转字符串,替换空格(从后向前填充),删除冗余空格
4.N数之和:3,4,...,n数和(通过前后两个指针不算向中间逼近,在一个for循环下完成两个for循环的工作)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步