1. 程式人生 > >LeetCode演算法題-Number of Segments in a String(Java實現)

LeetCode演算法題-Number of Segments in a String(Java實現)

這是悅樂書的第226次更新,第239篇原創

01 看題和準備

今天介紹的是LeetCode演算法題中Easy級別的第93題(順位題號是434)。計算字串中的段數,其中段定義為非空格字元的連續序列。請注意,該字串不包含任何不可列印的字元。例如:

輸入:“Hello, my name is John”

輸出:5

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 第一種解法

使用正則表示式,將其拆分成字串陣列,陣列大小就是最後需要的結果。

\s表示匹配任何不可見字元,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。

+表示匹配前面的子表示式一次或多次(大於等於1次)。

在匹配前,我們先要將首尾的空格去掉。

public int countSegments(String s) {
    String ss = s.trim();
    if (ss.length() == 0) {
        return 0;
    }
    String[] arr = ss.split("\\s+");
    return arr.length;
}


03 第二種解法

特殊情況:當s為空串或全部為空格組成時,直接返回0。

正常情況:將s按照空格拆分成字串陣列,然後遍歷陣列中的每一個元素,只有當前元素不是空串時,記數變數加1,最後返回該記數變數。

public int countSegments2(String s) {
    if (s.length() == 0 || s.trim().length() == 0) {
        return 0;
    }
    int count = 0;
    String[] arr = s.split(" ");
    for(String str : arr){
        if (!"".equals(str)) {
            count++;
        }
    }
    return count;
}


04 第三種解法

特殊情況:當s為空串或全部為空格組成時,直接返回0。

正常情況:使用for迴圈,直接判斷s中當前字元與前一個字元是否一個為空格,一個不為空格,滿足這兩條件時,記數變數加1。在迴圈開始時,索引為0,因此此時是判斷索引是否等於0和第一位字元是否不等於空格。

public int countSegments3(String s) {
    if (s.length() == 0 || s.trim().length() == 0) {
        return 0;
    }
    int count = 0;
    for (int i=0; i<s.length(); i++) {
        if (s.charAt(i) != ' ' && (i == 0 || s.charAt(i-1) == ' ')) {
            count++;
        }
    }
    return count;
}


05 小結

演算法專題目前已連續日更超過兩個月,演算法題文章93+篇,公眾號對話方塊回覆【資料結構與演算法】、【演算法】、【資料結構】中的任一關鍵詞,獲取系列文章合集。

以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!