技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
我們定義一個數組res用來存放返回的字符串。
S的第一個字符一定是‘(’,且它一定是一個“原有效括號字符串”最外面的左括號,是要刪掉的,不能放到res中。所以我們從第二個字符開始遍歷S。
在此之前我們還需要定義一個整形變量c來統計狀態:如果遇到左括號就加1,遇到右括號減1,c初始化為0。
同時我們要檢查c的值,如果c不等於-1就將當前字符追加到res中。
為什麼要這麼做?
因為括號是成對出現的,且跳過了“原有效括號字符串”最外面的左括號,所以當遇到“原有效括號字符串”最外面的右括號的時候,c應該是-1。這個時候我們就知道一個"原有效括號字符串"遍歷結束。再用同樣的方法遍歷下一個"原有效括號字符串"。
我們用上圖的示例來說明整個算法流程。
第一步:遇到左括號,c加1,因為遇到左括號,c始終是加的,不可能為負值,所以不用判斷c的值,直接將當前字符追加到res中去;
第二步:遇到右括號,c減1,由於是減,c有可能為負的,所以要判斷c的值。c=0,所以繼續追加;
第三步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。不追加;
第四步: 開始遍歷一個新的“原有效括號字符串”,所以這個字符要跳過;
第五步:遇到左括號,c加1,追加;
第六步:遇到右括號,c減1,判斷c的值,為0,追加;
第七步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。實際上這一步不用做,因為字符串最後面一個字符,是“原有效括號字符串”最外面的右括號,我們是不需要的,可以直接跳過;
具體代碼如下:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
我們定義一個數組res用來存放返回的字符串。
S的第一個字符一定是‘(’,且它一定是一個“原有效括號字符串”最外面的左括號,是要刪掉的,不能放到res中。所以我們從第二個字符開始遍歷S。
在此之前我們還需要定義一個整形變量c來統計狀態:如果遇到左括號就加1,遇到右括號減1,c初始化為0。
同時我們要檢查c的值,如果c不等於-1就將當前字符追加到res中。
為什麼要這麼做?
因為括號是成對出現的,且跳過了“原有效括號字符串”最外面的左括號,所以當遇到“原有效括號字符串”最外面的右括號的時候,c應該是-1。這個時候我們就知道一個"原有效括號字符串"遍歷結束。再用同樣的方法遍歷下一個"原有效括號字符串"。
我們用上圖的示例來說明整個算法流程。
第一步:遇到左括號,c加1,因為遇到左括號,c始終是加的,不可能為負值,所以不用判斷c的值,直接將當前字符追加到res中去;
第二步:遇到右括號,c減1,由於是減,c有可能為負的,所以要判斷c的值。c=0,所以繼續追加;
第三步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。不追加;
第四步: 開始遍歷一個新的“原有效括號字符串”,所以這個字符要跳過;
第五步:遇到左括號,c加1,追加;
第六步:遇到右括號,c減1,判斷c的值,為0,追加;
第七步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。實際上這一步不用做,因為字符串最後面一個字符,是“原有效括號字符串”最外面的右括號,我們是不需要的,可以直接跳過;
具體代碼如下:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
我們定義一個數組res用來存放返回的字符串。
S的第一個字符一定是‘(’,且它一定是一個“原有效括號字符串”最外面的左括號,是要刪掉的,不能放到res中。所以我們從第二個字符開始遍歷S。
在此之前我們還需要定義一個整形變量c來統計狀態:如果遇到左括號就加1,遇到右括號減1,c初始化為0。
同時我們要檢查c的值,如果c不等於-1就將當前字符追加到res中。
為什麼要這麼做?
因為括號是成對出現的,且跳過了“原有效括號字符串”最外面的左括號,所以當遇到“原有效括號字符串”最外面的右括號的時候,c應該是-1。這個時候我們就知道一個"原有效括號字符串"遍歷結束。再用同樣的方法遍歷下一個"原有效括號字符串"。
我們用上圖的示例來說明整個算法流程。
第一步:遇到左括號,c加1,因為遇到左括號,c始終是加的,不可能為負值,所以不用判斷c的值,直接將當前字符追加到res中去;
第二步:遇到右括號,c減1,由於是減,c有可能為負的,所以要判斷c的值。c=0,所以繼續追加;
第三步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。不追加;
第四步: 開始遍歷一個新的“原有效括號字符串”,所以這個字符要跳過;
第五步:遇到左括號,c加1,追加;
第六步:遇到右括號,c減1,判斷c的值,為0,追加;
第七步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。實際上這一步不用做,因為字符串最後面一個字符,是“原有效括號字符串”最外面的右括號,我們是不需要的,可以直接跳過;
具體代碼如下:
Java語言實現:
Java 的實現和C語言的實現一致,不再撰述。
代碼如下:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
我們定義一個數組res用來存放返回的字符串。
S的第一個字符一定是‘(’,且它一定是一個“原有效括號字符串”最外面的左括號,是要刪掉的,不能放到res中。所以我們從第二個字符開始遍歷S。
在此之前我們還需要定義一個整形變量c來統計狀態:如果遇到左括號就加1,遇到右括號減1,c初始化為0。
同時我們要檢查c的值,如果c不等於-1就將當前字符追加到res中。
為什麼要這麼做?
因為括號是成對出現的,且跳過了“原有效括號字符串”最外面的左括號,所以當遇到“原有效括號字符串”最外面的右括號的時候,c應該是-1。這個時候我們就知道一個"原有效括號字符串"遍歷結束。再用同樣的方法遍歷下一個"原有效括號字符串"。
我們用上圖的示例來說明整個算法流程。
第一步:遇到左括號,c加1,因為遇到左括號,c始終是加的,不可能為負值,所以不用判斷c的值,直接將當前字符追加到res中去;
第二步:遇到右括號,c減1,由於是減,c有可能為負的,所以要判斷c的值。c=0,所以繼續追加;
第三步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。不追加;
第四步: 開始遍歷一個新的“原有效括號字符串”,所以這個字符要跳過;
第五步:遇到左括號,c加1,追加;
第六步:遇到右括號,c減1,判斷c的值,為0,追加;
第七步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。實際上這一步不用做,因為字符串最後面一個字符,是“原有效括號字符串”最外面的右括號,我們是不需要的,可以直接跳過;
具體代碼如下:
Java語言實現:
Java 的實現和C語言的實現一致,不再撰述。
代碼如下:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
我們定義一個數組res用來存放返回的字符串。
S的第一個字符一定是‘(’,且它一定是一個“原有效括號字符串”最外面的左括號,是要刪掉的,不能放到res中。所以我們從第二個字符開始遍歷S。
在此之前我們還需要定義一個整形變量c來統計狀態:如果遇到左括號就加1,遇到右括號減1,c初始化為0。
同時我們要檢查c的值,如果c不等於-1就將當前字符追加到res中。
為什麼要這麼做?
因為括號是成對出現的,且跳過了“原有效括號字符串”最外面的左括號,所以當遇到“原有效括號字符串”最外面的右括號的時候,c應該是-1。這個時候我們就知道一個"原有效括號字符串"遍歷結束。再用同樣的方法遍歷下一個"原有效括號字符串"。
我們用上圖的示例來說明整個算法流程。
第一步:遇到左括號,c加1,因為遇到左括號,c始終是加的,不可能為負值,所以不用判斷c的值,直接將當前字符追加到res中去;
第二步:遇到右括號,c減1,由於是減,c有可能為負的,所以要判斷c的值。c=0,所以繼續追加;
第三步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。不追加;
第四步: 開始遍歷一個新的“原有效括號字符串”,所以這個字符要跳過;
第五步:遇到左括號,c加1,追加;
第六步:遇到右括號,c減1,判斷c的值,為0,追加;
第七步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。實際上這一步不用做,因為字符串最後面一個字符,是“原有效括號字符串”最外面的右括號,我們是不需要的,可以直接跳過;
具體代碼如下:
Java語言實現:
Java 的實現和C語言的實現一致,不再撰述。
代碼如下:
Python語言實現:
Python 的實現和C語言的實現一致,不再撰述。
代碼如下:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
我們定義一個數組res用來存放返回的字符串。
S的第一個字符一定是‘(’,且它一定是一個“原有效括號字符串”最外面的左括號,是要刪掉的,不能放到res中。所以我們從第二個字符開始遍歷S。
在此之前我們還需要定義一個整形變量c來統計狀態:如果遇到左括號就加1,遇到右括號減1,c初始化為0。
同時我們要檢查c的值,如果c不等於-1就將當前字符追加到res中。
為什麼要這麼做?
因為括號是成對出現的,且跳過了“原有效括號字符串”最外面的左括號,所以當遇到“原有效括號字符串”最外面的右括號的時候,c應該是-1。這個時候我們就知道一個"原有效括號字符串"遍歷結束。再用同樣的方法遍歷下一個"原有效括號字符串"。
我們用上圖的示例來說明整個算法流程。
第一步:遇到左括號,c加1,因為遇到左括號,c始終是加的,不可能為負值,所以不用判斷c的值,直接將當前字符追加到res中去;
第二步:遇到右括號,c減1,由於是減,c有可能為負的,所以要判斷c的值。c=0,所以繼續追加;
第三步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。不追加;
第四步: 開始遍歷一個新的“原有效括號字符串”,所以這個字符要跳過;
第五步:遇到左括號,c加1,追加;
第六步:遇到右括號,c減1,判斷c的值,為0,追加;
第七步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。實際上這一步不用做,因為字符串最後面一個字符,是“原有效括號字符串”最外面的右括號,我們是不需要的,可以直接跳過;
具體代碼如下:
Java語言實現:
Java 的實現和C語言的實現一致,不再撰述。
代碼如下:
Python語言實現:
Python 的實現和C語言的實現一致,不再撰述。
代碼如下:
技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後> 到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和> 精力有限,其他語言的實現有興趣的朋友請自己嘗試。初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分佈式> 聊到大數據框架,從大數據聊到人工智能,... ...。
如果有任何問題可以在文章後評論或者私信給我。
持續分享,敬請關注。
LeetCode 1021. 刪除最外面的括號(Remove Outermost Parentheses)
問題描述:
一個有效括號字符串可以使是空字符串,或者是其他的有效括號字符串的某種連接字符串。
形如"(" + A + ")" 或者A + B的(A,B是有效括號字符串,+表示字符串連接操作)。
例如,下列都是有效括號字符串:
"", "()", "(())()", 和 "(()(()))"
如果一個非空有效括號字符串不能被分隔成另外兩個非空有效括號字符串的A+B形式,則稱改字符串為"原有效括號字符串"。
現在給定一個有效的括號字符串S,它是 由一系列"原有效括號字符串"連接而成的字符串,形如:S = P_1 + P_2 + ... + P_k;(P_i是"原有效括號字符串")。
請編寫一個算法,返回移除S中每一個"原有效括號字符串"最外面的一對括號後的字符串。
注:
- S.length <= 10000;
- S[i] 僅包含 "(" 或者 ")";
- S 是一個有效的括號字符串;
示例:
C語言實現:
題目描述說S一定是一個有效的括號字符串。所以不考慮無效的情況。
如果S長度小於等於2的話,這是一種特殊特殊情況,S只能是“”或者“()”,所以結果都會返回“”。
S長度超過2的情況。我們的算法處理過程,示例如下:
我們定義一個數組res用來存放返回的字符串。
S的第一個字符一定是‘(’,且它一定是一個“原有效括號字符串”最外面的左括號,是要刪掉的,不能放到res中。所以我們從第二個字符開始遍歷S。
在此之前我們還需要定義一個整形變量c來統計狀態:如果遇到左括號就加1,遇到右括號減1,c初始化為0。
同時我們要檢查c的值,如果c不等於-1就將當前字符追加到res中。
為什麼要這麼做?
因為括號是成對出現的,且跳過了“原有效括號字符串”最外面的左括號,所以當遇到“原有效括號字符串”最外面的右括號的時候,c應該是-1。這個時候我們就知道一個"原有效括號字符串"遍歷結束。再用同樣的方法遍歷下一個"原有效括號字符串"。
我們用上圖的示例來說明整個算法流程。
第一步:遇到左括號,c加1,因為遇到左括號,c始終是加的,不可能為負值,所以不用判斷c的值,直接將當前字符追加到res中去;
第二步:遇到右括號,c減1,由於是減,c有可能為負的,所以要判斷c的值。c=0,所以繼續追加;
第三步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。不追加;
第四步: 開始遍歷一個新的“原有效括號字符串”,所以這個字符要跳過;
第五步:遇到左括號,c加1,追加;
第六步:遇到右括號,c減1,判斷c的值,為0,追加;
第七步:遇到右括號,c減1,判斷c的值,為-1,說明一個“原有效括號字符串”遍歷結束。實際上這一步不用做,因為字符串最後面一個字符,是“原有效括號字符串”最外面的右括號,我們是不需要的,可以直接跳過;
具體代碼如下:
Java語言實現:
Java 的實現和C語言的實現一致,不再撰述。
代碼如下:
Python語言實現:
Python 的實現和C語言的實現一致,不再撰述。
代碼如下:
謝謝大家一直以來的關注和支持!
我一直在努力的寫好每一篇文章,畫好每一份插圖。但是作為一個996從業人員,時間精力十分有限。所以針對評論部分,以後只回答粉絲的問題和私信。希望僅僅是路過的朋友能夠體諒,希望更多人關注《吾是我師》,謝謝!