youngyangyang04 / leetcode-master-comment

用来做评论区
0 stars 0 forks source link

[Vssue]1047.删除字符串中的所有相邻重复项.md #45

Open youngyangyang04 opened 5 months ago

youngyangyang04 commented 5 months ago

https://programmercarl.com/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.html

Du1in9 commented 4 months ago
class Solution {
    public String removeDuplicates(String S) {
        Stack<Character> st = new Stack<>();
        for (char s : S.toCharArray()) {
            if (st.isEmpty() || s != st.peek()) {
                st.push(s);
            } else {
                st.pop();
            }
        }
        StringBuilder sb = new StringBuilder();
        while (!st.isEmpty()) {
            sb.append(st.pop());
        }
        return sb.reverse().toString();
    }
}
De1igentYing commented 4 months ago

java代码越来越搞笑了 之前就发现了 有的时候没必要early stop的时候偏偏要写上几句多余的if,有时明明思路里面都写了要early stop了然后代码总是漏掉,这次更是经典 ,reverse都不写都可以堂而皇之的贴上去,你也不看看自己的代码能跑通样例吗

djsjznsn commented 1 month ago

java直接用StringBuilder不是最快吗

sheep112 commented 1 week ago

c语言

#define LEN 100000
typedef struct{
    int size;
    int top;
    char array[LEN];
} stack;

int isempty(stack *mystack)
{
    if(mystack->top==0)
    {
        return 1;
    }
    return 0;
}

int isfull(stack *mystack)
{
    if(mystack->top>=mystack->size)
    {
        return 1;
    }
    return 0;
}
void pushstack(stack *mystack,char val)
{
    if(isfull(mystack))
    {
        return;
    }
    mystack->array[mystack->top++]=val;
}
char popstack(stack *mystack)
{
    if(isempty(mystack))
    {
        return ' ';
    }
    return mystack->array[--mystack->top];
}
char peekstack(stack *mystack)
{
    if(isempty(mystack))
    {
        return ' ';
    }
    return mystack->array[mystack->top-1];
}

char* removeDuplicates(char* s) {
    stack *mystack=(stack*)malloc(sizeof(stack));
    mystack->size=LEN;
    mystack->top=0;
    int len=strlen(s);
    for(int i=0;i<len;i++)
    {
        if(isempty(mystack))
        {
            pushstack(mystack,s[i]);
            continue;
        }

        if(peekstack(mystack)==s[i])
        {
            popstack(mystack);
        }
        else{
            pushstack(mystack,s[i]);
        }
    }
    mystack->array[mystack->top]='\0';
    strcpy(s,mystack->array);
    free(mystack);
    return s;

}
110LK commented 1 week ago

java最快的一集,用静态数组模拟栈。

class Solution {
    public String removeDuplicates(String s) {
        char[] cs = s.toCharArray();
        char[] stack = new char[s.length()];
        int i = -1;   //i时刻指向栈顶
        for(char c : cs){
            if(i >= 0 && stack[i] == c)
                i--;
            else
                stack[++i] = c;
        }
        return new String(stack, 0, i + 1);
    }
}