---
description: 要得到字串位置 0 值，不必轉成陣列，只要 "abc".charAt(0) 就可以
---

# #1047 Remove All Adjacent Duplicates In String

[LeetCode](https://leetcode.com/problems/remove-all-adjacent-duplicates-in-string/)

```
Given a string S of lowercase letters, 
a duplicate removal consists of choosing two adjacent and equal letters, and removing them.

We repeatedly make duplicate removals on S until we no longer can.

Return the final string after all such duplicate removals have been made.  It is guaranteed the answer is unique.

input: 一個全部小寫的 String
output: 移掉相鄰的重覆值直到幫邊沒重覆了
```

```
Example 1:

Input: "abbaca"
Output: "ca"
Explanation: 
For example, in "abbaca" we could remove "bb" since the letters are adjacent and equal, 
and this is the only possible move.  
The result of this move is that the string is "aaca", of which only "aa" is possible, so the final string is "ca".

Note:

1 <= S.length <= 20000
S consists only of English lowercase letters.
*/

/**
 * @param {string} S
 * @return {string}
 */
var removeDuplicates = function(S) {}
```

### Edge

aaaaba，是 aaa 被移掉還是 aa (因為假如是 aaa 就不能用 stack 概念了)

### 如何解

會 Stack 好讚阿，瞬間解完耶

```
var removeDuplicates = function(S) {
    if(S.length < 2){
        return S
    }

    let stack = [S.charAt(0)];
    for(let i = 1; i< S.length; i++){
        if(stack[stack.length - 1] == S.charAt(i)){
            stack.pop();
        }else{
            stack.push(S.charAt(i));
        }
    }
    return stack.join('');
};

console.log(removeDuplicates("abbaca"))
// faster than 71.63% of JavaScript online submissions
```

### 學到什麼

本來還先把 S 轉成陣列，其實字串就可以用 charAt( ind ) 抓值囉
