(写给未来遗忘的自己)
题目:
代码:
class Solution {
public:
string removeDuplicates(string s) {
std::stack<char> s_stack;
for (int i = 0; i < s.size(); i++) {
if (!s_stack.empty() && s[i] == s_stack.top()) {
s_stack.pop();
} else {
s_stack.push(s[i]);
}
}
// 创建一个足够大的字符串用于保存栈中元素
string result(s_stack.size(), ' ');
// 将栈中元素倒序插入字符串中
for (int i = s_stack.size() - 1; i >= 0; i--) {
result[i] = s_stack.top();
s_stack.pop();
}
return result;
}
};
第一次出错的点(知识点):
// 创建一个足够大的字符串用于保存栈中元素
string result(s_stack.size(), ' ');
//例子
std::string s(5, 'a'); // 创建一个大小为5,所有位置为'a'的字符串 "aaaaa"
1.string result(s_stack.size(), ' ');
这是一个使用了带参数构造函数的字符串初始化方式,它根据指定的大小和字符来创建字符串。
- 初始化方式: 使用构造函数
std::string(size_t n, char c)
。 - 参数含义:
s_stack.size()
是要创建的字符串的大小。' '
是用来填充字符串的字符。
- 结果: 这个操作创建了一个字符串,长度为
s_stack.size()
,并且每个位置都被初始化为字符' '
(空格)。例如,如果s_stack.size()
为 5,则result
会是" "
,一个长度为 5 的空格字符串。
2. std::string result
这是一个默认构造的空字符串。
- 初始化方式: 使用了
std::string
的默认构造函数。 - 结果: 这个操作创建了一个空的字符串,即
result
的内容为空,长度为 0。此时你不能直接通过下标访问或修改它的内容,因为它不包含任何字符。
思路:
将字符串的第一个数和栈的top对比,如果一致就将栈的第一个数弹出,如果不一致将字符串压入。到最后栈内剩下的数就是字符串不是相邻且相同的字符。
栈是不能用return直接给返回的,需要一个一个弹出,而且先进后出的机制,使顺序不对,所以建立一个栈大小的string类型,按照倒序的方式将栈内的数据保存出来。