【LetMeFly】3612.用特殊操作处理字符串 I:I先模拟
力扣题目链接:https://leetcode.cn/problems/process-string-with-special-operations-i/
给你一个字符串 s,它由小写英文字母和特殊字符:*、# 和 % 组成。
请根据以下规则从左到右处理 s 中的字符,构造一个新的字符串 result:
- 如果字符是 小写 英文字母,则将其添加到
result中。 - 字符
'*'会 删除result中的最后一个字符(如果存在)。 - 字符
'#'会 复制 当前的result并 追加到其自身后面。 - 字符
'%'会 反转 当前的result。
在处理完 s 中的所有字符后,返回最终的字符串 result。
示例 1:
输入: s = "a#b%*"
输出: "ba"
解释:
i |
s[i] |
操作 | 当前 result |
|---|---|---|---|
| 0 | 'a' |
添加 'a' |
"a" |
| 1 | '#' |
复制 result |
"aa" |
| 2 | 'b' |
添加 'b' |
"aab" |
| 3 | '%' |
反转 result |
"baa" |
| 4 | '*' |
删除最后一个字符 | "ba" |
因此,最终的 result 是 "ba"。
示例 2:
输入: s = "z*#"
输出: ""
解释:
i |
s[i] |
操作 | 当前 result |
|---|---|---|---|
| 0 | 'z' |
添加 'z' |
"z" |
| 1 | '*' |
删除最后一个字符 | "" |
| 2 | '#' |
复制字符串 | "" |
因此,最终的 result 是 ""。
提示:
1 <= s.length <= 20s只包含小写英文字母和特殊字符*、#和%。
解题方法:模拟
字符串长度最大20所以暴力模拟就好。遍历字符串:
- 如果字符是
#就复制 - 如果字符是
%就翻转 - 如果字符是
*就看答案字符串是否为空,非空则删除最后一个字符 - 否则添加当前字符到答案字符串中
以上。
- 时间复杂度:单次删除、追加 O ( 1 ) O(1) O(1),单次复制、翻转 O ( n ) O(n) O(n)
- 空间复杂度 O ( 1 ) O(1) O(1),力扣返回值不计入算法空间复杂度
AC代码
C++
cpp
/*
* @LastEditTime: 2026-06-16 00:08:11
*/
class Solution {
public:
string processStr(string s) {
string ans;
for (char c : s) {
if (c == '#') {
ans = ans + ans;
} else if (c == '%') {
reverse(ans.begin(), ans.end());
} else if (c == '*') {
if (ans.size()) {
ans.pop_back();
}
} else {
ans += c;
}
}
return ans;
}
};
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源