訓練營day08:字符串1-344.反轉字符串,541. 反轉字符串II,151.翻轉字符串里的單詞

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--;
        }
    }
} 
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容