1047. Remove All Adjacent Duplicates In String

LeetCode easy оригинал: C# #array #csharp #easy #leetcode #stack #string

Вам дана строка s, состоящая из строчных английских букв. Удаление дубликатов заключается в выборе двух соседних и одинаковых букв и их удалении. Мы многократно производим удаление дубликатов в s, пока не перестанем это делать. Верните конечную строку после того, как все такие удаления дубликатов будут произведены. Можно доказать, что ответ уникален.

Пример:

Input: stones = [2,7,4,1,8,1]

Output: 1

C# решение

сопоставлено/оригинал
public class Solution {
    public string RemoveDuplicates(string s) {
        Stack<char> stack = new Stack<char>();
        foreach (char c in s) {
            if (stack.Count > 0 && stack.Peek() == c) {
                stack.Pop();
            } else {
                stack.Push(c);
            }
        }
        char[] result = stack.ToArray();
        Array.Reverse(result);
        return new string(result);
    }
}

C++ решение

auto-draft, проверить перед отправкой
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string RemoveDuplicates(string s) {
        stack<char> stack = new stack<char>();
        foreach (char c in s) {
            if (stack.size() > 0 && stack.Peek() == c) {
                stack.pop();
            } else {
                stack.push(c);
            }
        }
        char[] result = stack.ToArray();
        Array.Reverse(result);
        return new string(result);
    }
}

Java решение

сопоставлено/оригинал
public class Solution {
    public String removeDuplicates(String s) {
        StringBuilder stack = new StringBuilder();
        for (char c : s.toCharArray()) {
            int len = stack.length();
            if (len > 0 && stack.charAt(len - 1) == c) {
                stack.deleteCharAt(len - 1);
            } else {
                stack.append(c);
            }
        }
        return stack.toString();
    }
}

Python решение

сопоставлено/оригинал
def removeDuplicates(s: str) -> str:
    stack = []
    for char in s:
        if stack and stack[-1] == char:
            stack.pop()
        else:
            stack.append(char)
    return ''.join(stack)

Go решение

сопоставлено/оригинал
package main

import (
    "fmt"
)

func removeDuplicates(s string) string {
    stack := []rune{}
    for _, char := range s {
        if len(stack) > 0 && stack[len(stack)-1] == char {
            stack = stack[:len(stack)-1]
        } else {
            stack = append(stack, char)
        }
    }
    return string(stack)
}

Algorithm

Создай пустой стек для хранения символов строки.

Проходи по символам строки, добавляя каждый символ в стек, если он не совпадает с верхним элементом стека, иначе удаляй верхний элемент.

После прохождения по строке, собери оставшиеся символы в стеке в результирующую строку и верни ее.

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.