本帖最后由 shaowu459 于 2023-12-21 17:24 编辑
公式简要说明如下:
=CONCAT( 合并栈内元素
REDUCE(
"", 设定x初始值为空字符串,防止弹出所有栈内元素时出错。x即为模拟的单调递增栈
SEQUENCE(LEN(A2)), 生成1~字符串长度的序列
LAMBDA(x, y,
LET(
s, MID(A2, y, 1), 按顺序提取源字符串中每个字符
IF(
OR(s = x), 如果当前字符在栈内已经存在
x, 不执行任何操作,保留x不变
VSTACK( 纵向堆积公式产生的结果
IF(
s > @TAKE(x, -1), 如果当前字符大于x底端的字符
x, 保留x不变,追加s在x底端
REDUCE(
x, 逐个判断当前栈内元素是否需要出栈
x, 控制次数
LAMBDA(m, n,
LET(
t, @TAKE(m, -1), 提取出栈后的底端元素
DROP(m, -(s < t) * ISNUMBER(FIND(t, MID(A2, y, LEN(A2))))) 如果栈底端元素大于当前字符,并且在当前字符后面还有,就出栈
)
)
)
),
s 无论栈内元素是否做出栈处理,最后都要在栈底追加当前遍历的字符
)
)
)
)
)
)
|