0
点赞
收藏
分享

微信扫一扫

Leetcode 1047. 删除字符串中的所有相邻重复项

早安地球 2022-03-13 阅读 66

1047. 删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

提示:

1 <= S.length <= 20000
S 仅由小写英文字母组成。

思路


malloc一个栈,来存放结果
遍历字符串s,如果元素和栈顶元素相同就删除栈顶元素,并且遍历下一个s中的元素,
需注意的是,top–的时候要判断top必须大于0否则不能减了,应该入栈了

代码

char * removeDuplicates(char * s){
    int len = strlen(s), top = 0;
    char* stack = (char*)malloc(sizeof(char) * len + 1);
    for (int i = 0; i < len; i++) {
        if (top > 0 && (stack[top - 1] == s[i])) 
            top--;
        else stack[top++] = s[i];
    }
    stack[top] = '\0';
    return stack;
}

双指针

char * removeDuplicates(char * s){
    int sLen = strlen(s);
    int fast = 0, slow = 0;
    
    while (fast < sLen) {
        s[slow] = s[fast++];
        if (slow > 0 && s[slow] == s[slow - 1]) slow--;
        else slow++;
    }
    
    s[slow] = '\0';

    return s;
}
举报

相关推荐

0 条评论