如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人的经验 ,比如准备简历实习校招总结offer选择也欢迎来一起参加秋招打卡活动 等;如果你是计算机小白,学习/转行/校招路上感到迷茫或者需要帮助,可以点此联系阿秀;免费分享阿秀个人学习计算机以来的收集到的好资源,点此白嫖;如果你需要《阿秀的学习笔记》网站中求职相关知识点的PDF版本的话,可以点此下载

# 1003. 检查替换后的词是否有效

力扣原题链接(点我直达) (opens new window)

给定有效字符串 "abc"。

对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + "abc" + Y 也同样是有效的。

例如,如果 S = "abc",则有效字符串的示例是:"abc","aabcbc","abcabc","abcabcababcc"。无效字符串的示例是:"abccba","ab","cababc","bac"。

如果给定字符串 S 有效,则返回 true;否则,返回 false。

示例 1:

输入:"aabcbc" 输出:true 解释: 从有效字符串 "abc" 开始。 然后我们可以在 "a" 和 "bc" 之间插入另一个 "abc",产生 "a" + "abc" + "bc",即 "aabcbc"。 示例 2:

输入:"abcabcababcc" 输出:true 解释: "abcabcabc" 是有效的,它可以视作在原串后连续插入 "abc"。 然后我们可以在最后一个字母之前插入 "abc",产生 "abcabcab" + "abc" + "c",即 "abcabcababcc"。 示例 3:

输入:"abccba" 输出:false 示例 4:

输入:"cababc" 输出:false

提示:

1 <= S.length <= 20000 2、S[i] 为 'a'、'b'、或 'c'

# 第一版,应该先判断是否为空再进行其他

执行用时 :24 ms, 在所有 cpp 提交中击败了63.73%的用户

内存消耗 :10.6 MB, 在所有 cpp 提交中击败了81.74%的用户

bool isValid(string S) {
	stack<char> st;
	for (auto &ch : S) {
		if (st.empty()){
			st.push(ch);
		}
		else if (ch == 'c') {
			if (!st.empty() && st.top() == 'b'  ) { //在下一步删除前删除前,应该先判断是否为空再进行其他操作
				st.pop();
				if (!st.empty() && st.top() == 'a' ) //在下一步删除前删除前,应该先判断是否为空再进行其他操作
					st.pop();
				else
				{
					st.push('b');
				}
			}
			else
			{
				st.push('c');
			}
		}
		else
			st.push(ch);
	}
	return st.empty();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26