首页 > 编程语言 >代码随想录算法训练营第11天 | 栈和队列

代码随想录算法训练营第11天 | 栈和队列

时间:2024-03-31 20:33:06浏览次数:35  
标签:11 return string 训练营 随想录 number st result push

20.有效的括号

遇到左括号入栈,遇到右括号弹出

bool isValid(string s) {
	stack<char> kuohao;
	char c;
	for (char a : s) {
		switch (a)
		{
			case'(':
			case'{':
			case'[':
				kuohao.push(a);
				break;
			case')':
			case'}':
			case']':
				if (kuohao.empty())
					return false;
				c = kuohao.top();
				kuohao.pop();
				if ((a == ')' && c == '(') || (a == ']' && c == '[') || (a == '}' && c == '{'))
					continue;
				else
					return false;
		default:
			break;
		}
	}
	if (kuohao.empty())
		return true;
	return false;
}

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

  • 使用栈
string removeDuplicates(string s) {
	
	stack<char> st;
	for (int i = 0; i < s.size(); i++) {
		if (st.empty()||st.push(s[i]);)
		{
			st.push(s[i]);
			continue;
		}
		else if (s[i] == st.top())
			st.pop();
	}

	string result="";    
	int size = st.size();

	for (int j = 0; j < size; j++) {
		result+= st.top();   //字符串string可以+=,不能result[j]=
		st.pop();
	}

	reverse(result.begin(), result.end());
	return result;
}
  • 直接使用字符串string,不用再翻转转换
string removeDuplicates(string S) {
        string result;
        for(char s : S) {
            if(result.empty() || result.back() != s) {
                result.push_back(s);
            }
            else {
                result.pop_back();
            }
        }
        return result;
    }

150.逆波兰表达式求值

关于string和int间的相互转换

int evalRPN(vector<string>& tokens) {

	stack<int> number;

	for (string s : tokens) {
		if (s == "*" || s == "+" || s == "/" || s == "-")
		{
			int a, b;
			a = number.top();
			number.pop();
			b = number.top();
			number.pop();
			if (s == "*")  number.push(a * b);
			else if (s == "/")  number.push(b / a);
			else if (s == "+")  number.push(a + b);
			else if (s == "-")  number.push(b - a);
		}
		else
			number.push(stoi(s));
	}
	return number.top();
}

关于返回局部变量

标签:11,return,string,训练营,随想录,number,st,result,push
From: https://www.cnblogs.com/ddup-cpp/p/18107213

相关文章

  • 代码随想录第11天: 栈的应用
    20.有效的括号力扣题目链接(opensnewwindow)给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例1:输入:“()......
  • 代码随想录第10天:栈和队列基础操作
    语言:Java参考资料:代码随想录 232.用栈实现队列力扣题目链接(opensnewwindow)使用栈实现队列的下列操作:push(x)–将一个元素放入队列的尾部。pop()–从队列首部移除元素。peek()–返回队列首部的元素。empty()–返回队列是否为空。示例:MyQueuequeue......
  • 洛谷P1102 A-B数对
    双指针做法:  反过来,从后往前看也是一样的:#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;constintN=2e5+5;int......
  • 111
    1.回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢计算机这个专业吗?你现在后悔选择了这个专业吗?你认为你现在最喜欢的领域是什么(可以是计算机的也可以是其它领域)?•我还是比较喜欢的,并没有后悔,喜欢一些自动化控制的领域,他需要用到计算机,尤其是编程,这项技能必不可少。......
  • 11
    请阅读北航陈彦吉同学的这篇博客中(地址:https://www.cnblogs.com/ChildishChange/p/7363123.html)的各参考资料,并回答如下问题:1.回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢计算机这个专业吗?你现在后悔选择了这个专业吗?你认为你现在最喜欢的领域是什么(可以是计算机......
  • 111
    1.回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢计算机这个专业吗?作为一个学生,回顾我过去将近三年的学习经历是一段充满挑战和成长的旅程。当初我报考计算机专业时,我对计算机确实有着浓厚的兴趣。我喜欢探索新技术,解决问题,并且觉得计算机领域充满了无限的可能性。在......
  • 111
    请阅读北航陈彦吉同学的这篇博客中(地址:https://www.cnblogs.com/ChildishChange/p/7363123.html)的各参考资料,并回答如下问题:1.回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢计算机这个专业吗?你现在后悔选择了这个专业吗?你认为你现在最喜欢的领域是什么(可以是计算机......
  • 代码随想录算法训练营第32天| 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏
    122.买卖股票的最佳时机II题目链接:买卖股票的最佳时机II题目描述:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出......
  • 代码随想录算法训练营第34天| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分
    1005.K次取反后最大化的数组和题目链接:K次取反后最大化的数组和题目描述:给你一个整数数组nums和一个整数k,按以下方法修改该数组:选择某个下标i并将nums[i]替换为nums[i]。重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数......
  • 代码随想录算法训练营第36天| 435. 无重叠区间、763.划分字母区间、56. 合并区间
    435.无重叠区间题目链接:无重叠区间题目描述:给定一个区间的集合intervals,其中intervals[i]=[starti,endi]。返回需要移除区间的最小数量,使剩余区间互不重叠。解题思想:这道题目和射气球很像。*“需要移除区间的最小数量,使剩余区间互不重叠”*等效于求重叠区......