leetcode 344.反轉字串
題目連結:leetcode 344.反轉字串
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰反轉字串
日期:2024-09-04
想法:用臨時值儲存左邊,左右互換就行了。
Java程式碼如下:
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while(left < right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
總結:與連結串列相比,字串的操作更像陣列。
leetcode 541. 反轉字串II
題目連結:leetcode 541. 反轉字串II
文件講解︰程式碼隨想錄(programmercarl.com)
影片講解︰反轉字串II
日期:2024-09-04
想法:起始位置每次增加2k,反轉位置為i+k-1,但要注意最後面剩餘長度不足k的情況,直接比較最後一個字元的位置和反轉位置的大小就行了
Java程式碼如下:
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0;i < ch.length;i += 2 * k){
int start = i;
int end = Math.min(ch.length - 1,start + k - 1);
while(start < end){
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp;
start++;
end--;
}
}
return new String(ch);
}
}
卡碼網:54.替換數字
題目連結:卡碼網:54.替換數字
文件講解︰程式碼隨想錄(programmercarl.com)
日期:2024-09-04
想法:掃描字串中的數字,掃到了,將長度增長5(為了放'number'),直接可以新定義一個增長的字串,然後從後往前將字母一一填進去。
Java程式碼如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int len = s.length();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) >= 0 && s.charAt(i) <= '9') {
len += 5;
}
}
char[] ret = new char[len];
for (int i = 0; i < s.length(); i++) {
ret[i] = s.charAt(i);
}
for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {
if ('0' <= ret[i] && ret[i] <= '9') {
ret[j--] = 'r';
ret[j--] = 'e';
ret[j--] = 'b';
ret[j--] = 'm';
ret[j--] = 'u';
ret[j--] = 'n';
} else {
ret[j--] = ret[i];
}
}
System.out.println(ret);
}
}