个人网站建设模板简洁图片,北京建管公司官网,企业网站代码怎么优化,做贸易怎么找客户Leetcode.1047 删除字符串中所有相邻重复项#xff1a;
1047. 删除字符串中的所有相邻重复项 - 力扣#xff08;LeetCode#xff09; 本题可以利用栈的思想进行解答。但是此处并不是真正的去使用一个栈#xff0c;而是利用来替代栈在本题中的作用。具体如下#xff1a;
…Leetcode.1047 删除字符串中所有相邻重复项
1047. 删除字符串中的所有相邻重复项 - 力扣LeetCode 本题可以利用栈的思想进行解答。但是此处并不是真正的去使用一个栈而是利用来替代栈在本题中的作用。具体如下
首先去遍历给定的字符串如果为空则将给定字符串的当前位置字符插入到中即
随后再去检测给定字符串中的字符如果其不等于中的最后一个字符则也将这个字符插入即
此时再去检测给定字符串中的字符由于这个字符与中的最后一个字符相同则删除中的这个字符即
因此整体逻辑就是如果为空或者的最后一个字符与给定字符串的字符不同则将给定字符串的字符插入到否则则删除中的最后一个字符。具体代码如下
class Solution {
public:string removeDuplicates(string s) {string str;for(int i 0; i s.size(); i){if(str.empty() || s[i] ! str.back()){str.push_back(s[i]);}else{str.pop_back();}}return str;}
}; Leetcode.20 有效的括号
20. 有效的括号 - 力扣LeetCode 为了方便理解本题下面给出三个示例
对于上面给出的范例不难发现由于小括号的左半部分 多了一个因此不符合有效括号这一定义 对于上面给出的范例不难看出由于右括号多了若干个因此也不满足有效括号的定义。
在大体了解了有效括号的定义后,下面给出题目解法 首先创建一个栈为了方便叙述这里将这个栈命名为。
首先判断给定字符串的长度是否为偶数如果不是则直接返回即可。
遍历给定的字符串如果位置的内容等于三种括号的左半部分则向栈中压入这个括号的右半部分。如果位置的内容是三种括号的右半部分则去和栈顶内容进行比较。 如果相等则说明括号匹配栈顶元素。如果不相等则说明括号不匹配直接返回 如果在遍历过程中出现了栈为空的情况则说明字符串中的括号的右半部分的数量大于左半部分因此返回。 在遍历完成后在此对栈进行一次检测如果此时栈为空则说明给定字符串中的括号的左半部分的数量大于右半部分返回。 对应代码如下
class Solution {
public:bool isValid(string s) {if(s.size()%2 ! 0){return false;}stackchar st;for(int i 0; i s.size(); i){if(s[i] (){st.push());}else if(s[i] [){st.push(]);}else if(s[i] {){st.push(});}else if(st.empty() || s[i] ! st.top()){return false;}else{ st.pop();}}if(!st.empty()){return false;}return true;}
}; Leetcode.150 逆波兰表达式求值
150. 逆波兰表达式求值 - 力扣LeetCode 原理较为简单首先创建一个栈这里命名为。随后遍历给定的字符串数组如果为运算符则创建变量用于存储两次出栈的元素。同时两次删除栈中的这两个元素。随后根据运算符将运算后的解决压入栈中。 如果位置的字符不是运算符则直接将压入栈中即可。对应代码如下
class Solution {
public:int evalRPN(vectorstring tokens) {stackint st; for (int i 0; i tokens.size(); i) {if (tokens[i] || tokens[i] - || tokens[i] * || tokens[i] /) {int num1 st.top();st.pop();int num2 st.top();st.pop();if (tokens[i] ) {st.push(num2 num1);}if (tokens[i] -){ st.push(num2 - num1);}if (tokens[i] *){st.push(num2 * num1);}if (tokens[i] /) {st.push(num2 / num1);}} else{st.push(stoi(tokens[i]));}}int result st.top();return result;}
};