344.反轉字符串
https://leetcode.cn/problems/reverse-string/description/
比較簡單的一題,左右指針循環(huán)交換數(shù)據
class Solution {
public void reverseString(char[] s) {
if (s == null && s.length <=1) return;
char temp;
int left = 0;
int right = s.length - 1;
while (left < right) {
temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
541. 反轉字符串II
https://leetcode.cn/problems/reverse-string-ii/
1.模擬題,題目思路也很簡單,這個簡單本身是因為數(shù)組索引效率比較方便
2.題目和第一題相比多一步,就是每次移動2k,然后反轉前k個元素,反轉的操作函數(shù)可以抽出來
class Solution {
public String reverseStr(String s, int k) {
if (s == null || k <= 0) {
return s;
}
char[] strArray = s.toCharArray();
int pos = 0;
while(pos < strArray.length - 1) {
// 這里需要注意判斷條件,剩下的數(shù)如果是不足k的話會溢出,一開始寫反了
if (pos + k > strArray.length - 1) {
// 剩余字符串少于k個的情況
swap(strArray, pos, strArray.length - 1);
} else {
// 剩余字符串>=k的情況
swap(strArray, pos, pos + k - 1);
}
pos += 2 * k;
}
return new String(strArray);
}
private void swap(char[] s, int begin, int end) {
if (s == null || s.length == 0 || begin < 0 || end < 0) {
return;
}
int left = begin;
int right = end;
while(left < right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
卡碼網替換數(shù)字
https://kamacoder.com/problempage.php?pid=1064
該題其實主要是c++里的用法,java由于本身String類型本身不能擴充長度,需要額外開辟空間,而java里的解法就是循環(huán)遍歷判斷、拼接,比較簡單,不貼代碼了
151.翻轉字符串里的單詞
https://leetcode.cn/problems/reverse-words-in-a-string/description/
這道題值得多看幾遍(明天再來補答案)
右旋字符串
https://kamacoder.com/problempage.php?pid=1065
1.其實這道題的難點原本是不開辟新的空間如何進行右旋,但java的String做不到,必須新建另外一個數(shù)據結構進行操作
2.對java的main入口函數(shù)如何取數(shù)需要單獨記憶下
① public static void main(String[] args) 是 Java 程序的入口點。當你執(zhí)行一個 Java 程序時,JVM (Java 虛擬機) 會自動調用這個方法來啟動程序的執(zhí)行;
② static表示該方法是靜態(tài)的,屬于類而不是實例。靜態(tài)方法可以直接通過類名調用,無需創(chuàng)建對象實例;
③ Scanner 是 Java 標準庫中的一個類,用于讀取用戶輸入。通過創(chuàng)建一個 Scanner 對象,并將其構造函數(shù)中的參數(shù)設置為 System.in,即表示從標準輸入(也就是控制臺)讀取用戶輸入。
import java.util.Scanner;
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();
int len = s.length(); //獲取字符串長度
char[] result = s.toCharArray();
swap(result, 0, len - 1);
swap(result, 0, n - 1);
swap(result, n, len - 1);
System.out.println(result);
}
public static void swap(char[] s, int begin, int end) {
if (begin >= end || s == null || s.length == 0) {
return;
}
int left = begin;
int right = end;
while(left < right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}