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迴圈的工作)