Re: [閒聊] 每日LeetCode已回收
1047. Remove All Adjacent Duplicates In String
給予一個字串s,若該字串存在任意兩字元相鄰則移除該兩個字元,直到不能移除為止。
Example:
Input: s = "abbaca"
Output: "ca"
Explanation:
abbaca -> aaca -> ca
法一 堆疊
思路:
1.基本上同前幾天的每日一題 #1ZQR2NID (Marginalman),只是判斷堆疊進出的條件
從大寫+小寫變成兩個相同字母
Java Code:
-------------------------------
class Solution {
public String removeDuplicates(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (stack.isEmpty() || stack.peek() != s.charAt(i)) {
stack.push(s.charAt(i));
} else {
stack.pop();
}
}
char[] chars = new char[stack.size()];
for (int i = stack.size() - 1; i >= 0; i--) {
chars[i] = stack.pop();
}
return new String(chars);
}
}
-------------------------------
法二 類堆疊
思路:
1.基本上也是堆疊的概念,只是進出的動作改用StringBuilder來實作,結果不用像堆疊
一樣要反轉。
Java Code:
--------------------------------
class Solution {
public String removeDuplicates(String S) {
StringBuilder sb = new StringBuilder();
for (char c : S.toCharArray()) {
int size = sb.length();
if (size > 0 && sb.charAt(size - 1) == c) {
sb.deleteCharAt(size - 1);
} else {
sb.append(c);
}
}
return sb.toString();
}
}
--------------------------------
https://i.imgur.com/x7iAaYu.png


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.68.131 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1668042219.A.FB2.html
推
11/10 09:40,
3年前
, 1F
11/10 09:40, 1F
推
11/10 09:59,
3年前
, 2F
11/10 09:59, 2F
討論串 (同標題文章)
完整討論串 (本文為第 95 之 719 篇):