TikTok
距离 TikTok(下称为 tt)被封禁的日期(1-19)还有几天,目前有了一些新的进展,问了在 tt 的朋友,内部口风已经从高风险转为低风险。
这意味着 tt 最终被封禁的可能性在急速下降。
距离我们此前聊到 tt,最近新发生了几件事:
- 美国当选总统特朗普正在考虑在上任后发布一项行政命令,暂停执行 tt 销售或禁止法 60 至 90 天
- tt 宣布,最高法院介入阻止禁令,否则计划于周日(1-19)全面关闭其在美国的应用
- 拜登政府正考虑如何让 tt 在美国继续运营
第 3 点是「tt 被封禁可能性急速下降」的主要原因,而第 3 点的出现,更多是因为第 2 点。
老美的政府就是这么摇摆不定。
这不禁让我想起来,当年的 Android 禁用事件,一度说要禁止我们使用 Android,但一旦我们做好了割舍的准备(宣布有了自研系统可替代),对方又说不禁了。
此前所说的 tt 封禁,只粗浅地禁止 tt 在各大应用上架(默许了存量用户可以继续使用)。结果现在 tt 直接宣布,如果禁令不取消,将会在禁令日关停美区服务器。一下子就把所有的 TikTok Shop 的商户和众多内容创作者的命运和禁令捆绑在一起。如果 tt 真的直接关停服务器,保守估计会导致数十亿美元的损失,同时对拜登政府的舆论指向也会被急速放大,这显然不是一件能让拜登政府坐得住的事件。
个人猜测,48 小时内,我们将会听到关于「禁令冻结 or 延迟」这样的好消息,拭目以待。
...
回归主题。
周四,来一道简单题。
题目描述
平台:LeetCode
题号:1021
有效括号字符串为空 ""
、"(" + A + ")"
或 A + B
,其中 A
和 B
都是有效的括号字符串,+
代表字符串的连接。
例如,""
,"()"
,"(())()"
和 "(()(()))"
都是有效的括号字符串。
如果有效字符串 s
非空,且不存在将其拆分为 s = A + B
的方法,我们称其为原语(primitive
),其中 A
和 B
都是非空有效括号字符串。
给出一个非空有效字符串 s
,考虑将其进行原语化分解,使得:s = P_1 + P_2 + ... + P_k
,其中 P_i
是有效括号字符串原语。
对 s
进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 s
。
示例 1:
输入:s = "(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
示例 2:
输入:s = "(()())(())(()(()))"
输出:"()()()()(())"
解释:
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
示例 3:
输入:s = "()()"
输出:""
解释:
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""。
提示:
s[i]
为'('
或')'
s
是一个有效括号字符串
双指针
和其他「有效括号」问题一样,我们将 (
记为 分,将 )
记为 。
由于 s
本身为有效字符串,因此我们可以从前往后进行处理,每一次找到符合 的连续段 ,然后再结合题意,删掉外层括号,即将 加入答案。
Java 代码:
class Solution {
public String removeOuterParentheses(String s) {
char[] cs = s.toCharArray();
int n = cs.length;
StringBuilder sb = new StringBuilder();
for (int i = 0, score = 0; i < n; score = 0) {
int j = i;
while (i == j || score != 0) score += cs[j++] == '(' ? 1 : -1;
sb.append(s.substring(i + 1, j - 1));
i = j;
}
return sb.toString();
}
}
C++ 代码:
class Solution {
public:
string removeOuterParentheses(string s) {
string ans;
for (int i = 0, score = 0; i < s.size(); score = 0) {
int j = i;
while (i == j || score != 0) score += (s[j++] == '(') ? 1 : -1;
ans += s.substr(i + 1, j - i - 2);
i = j;
}
return ans;
}
};
Python 代码:
class Solution:
def removeOuterParentheses(self, s: str) -> str:
ans = ""
n, i = len(s), 0
while i < n:
j, score = i, 0
while i == j or score != 0:
score += 1 if s[j] == '(' else -1
j += 1
ans += s[i + 1: j - 1]
i = j
return ans
TypeScript 代码:
function removeOuterParentheses(s: string): string {
const n = s.length;
let ans = "";
for (let i = 0, score = 0; i < n; score = 0) {
let j = i;
while (j == i || score !== 0) score += s[j++] === '(' ? 1 : -1;
ans += s.substring(i + 1, j - 1);
i = j;
}
return ans;
};
- 时间复杂度:
- 空间复杂度: