代码随想录算法训练营第十一天|20. 有效的括号 1047. 删除字符串中的所有相邻重复150. 逆波兰表达式求值

题目链接:20. 有效的括号

这道题有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,字符串遍历完之后,栈是空的,就说明全都匹配了。

代码如下:

class Solution {
public:
    bool isValid(string s) {
        stack st;
        if(st.size()%2!=0)
        return false;
        for(int i=0;i

题目链接:1047. 删除字符串中的所有相邻重复

(1)使用双指针法:

char * removeDuplicates(char * s){
    int fast=0,slow=0;
    int len=strlen(s);
    while(fast0&&letter==s[slow-1])
        slow--;
        else
        slow++;
    }
    s[slow]=0;
    return s;
}

(2)使用栈

char * removeDuplicates(char * s){
    int len=strlen(s);
    char* stack=(char*)malloc(sizeof(char)*len+1);
    int stackTop=0;
    int index=0;
    while(index0 && letter==stack[stackTop-1])
        stackTop--;
        else
        stack[stackTop++]=letter;
    }
    stack[stackTop]='\0';
    return stack;
}

题目链接:150. 逆波兰表达式求值

这道题只要知道逆波兰表达式是用后序遍历的方式把二叉树序列化了,就可以了。

在进一步看,本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算,那么这就是一个相邻字符串消除的过程。

代码如下:

class Solution {
public:
    int evalRPN(vector& s) {
    stack st;
    for(int i=0;i

你可能感兴趣的:(代码随想录,算法,leetcode,c++)