3612.用特殊操作处理字符串 I:I先模拟

【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 <= 20
  • s 只包含小写英文字母和特殊字符 *#%

解题方法:模拟

字符串长度最大20所以暴力模拟就好。遍历字符串:

  • 如果字符是#就复制
  • 如果字符是%就翻转
  • 如果字符是*就看答案字符串是否为空,非空则删除最后一个字符
  • 否则添加当前字符到答案字符串中

以上。

  • 时间复杂度:单次删除、追加$O(1)$,单次复制、翻转$O(n)$
  • 空间复杂度$O(1)$,力扣返回值不计入算法空间复杂度

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


3612.用特殊操作处理字符串 I:I先模拟
https://blog.letmefly.xyz/2026/06/16/LeetCode 3612.用特殊操作处理字符串I/
作者
发布于
2026年6月16日
许可协议