《算法集训传送门》
👉引言
铭记于心 | ||
---|---|---|
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉 |
💖
❄️我们的算法之路❄️💖
众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️
💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(dfs),💝宽度优先搜索(bfs),💝数论,💝动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!🎉🎉🎉
今日主题:双向链表
👉⭐️第一题💎
✨题目
2296. 设计一个文本编辑器 - 力扣(LeetCode)
-
简单来说就是需要去模拟编辑器的操作,也就是字符串的添加与删除,根据编辑器的光标特性可以知道,当删除操作时,字符串从尾部开始删除,这就比较像 栈操作 中的出栈
-
想到此,大致的思路走向也就有了雏形,需要两个栈就可以模拟整个编辑器的操作,当光标回退时,就相当于栈A元素出栈到栈B,而删除操作就直接是出栈,请看Code
✨代码:
class TextEditor {
public:
stack<char> left, right;
TextEditor() {}
void addText(string text) {
for (char c:text) left.push(c);
}
int deleteText(int k) {
k = min(k, (int)left.size());
for (int i = 0; i < k; i++) left.pop();
return k;
}
string text() {
string res;
for (int i = 0, k = min((int)left.size(), 10); i < k; i++) {
res.insert(res.begin(), left.top());
left.pop();
}
addText(res);
return res;
}
string cursorLeft(int k) {
k = min(k, (int)left.size());
while (k--) {
right.push(left.top());
left.pop();
}
return text();
}
string cursorRight(int k) {
k = min(k, (int)right.size());
while (k--) {
left.push(right.top());
right.pop();
}
return text();
}
};
🌹写在最后💖:
相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!🌹🌹🌹