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

20.有效的括号

public class Solution {
    public bool IsValid(string s) {
        Stack a=new Stack();
        for(int i=0;i

思路清晰明了,把所有括号分为左括号和有括号,然后遍历字符串S,但凡遇到左括号就压入栈中,遇到有括号就弹出栈顶元素,如果能匹配上就继续,如果栈是空的,遇到了右括号,那就直接返回False,栈顶的左括号遇见遍历到的右括号不匹配,也返回False,最终遍历完成配对完成,栈中不存在任何东西即Count为0,则返回True,如果最终栈里面仍有左括号,那就返回False,结束该题。

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

public class Solution {
    public string RemoveDuplicates(string s) {
        Stacks1=new Stack();
        Stackns=new Stack();
        char []c=s.ToCharArray();
        string ans="";
        for(int i=0;i=1)
            {
                if(c[i]==s1.Peek())
                {
                    s1.Pop();
                    continue;
                }
            }
            s1.Push(c[i]);
        }
        while(s1.Count!=0)
        {
            ns.Push(s1.Pop());
        }
        while(ns.Count!=0)
        {
            ans+=ns.Pop();
        }
        return ans;
    }
}

声明两个Stack,一个用来删除相邻重复元素,另一个用于恢复原字符串顺序。当栈里面数量为空,直接压入遍历到的字母,然后栈不为空的时候压入之前要进行判断,是否压入的字母与栈顶的字母相同,如果相同,不压入反而弹出栈顶的元素,然后继续遍历字符串里下一个字母,反复多次,直到遍历完成。然后全部弹出压入第二个栈,然后第二个栈再依次弹出加入返回的数组里面。

150.逆波兰表达式求值

public class Solution {
    public int EvalRPN(string[] tokens) {
        Stack s=new Stack();
        int l=0;
        int r=0;
        int num=0;
        for(int i=0;i

逆波兰表达式是一种利用二叉树的其中一种遍历顺序形成的运算法则,简单的来说,我们遇到符号,就要去找符号之前的两个数字进行符号运算,然后返回新值回去,重复该过程,直到最终只剩一个值。首先遍历字符数组,没遇到运算符号就往栈里压就行,但要取两个Int变量记录运算符号的左右两个数,记为L和R,遇到运算符号就弹出两个数分别付给L和R,切记除法运算是R/L,运算完成后压入栈中即可,数字可用TryParse()转换,然运算符号只能用Switch配合Case语句获得,最终返回栈顶唯一元素即可。

你可能感兴趣的:(算法,leetcode,c#,数据结构)