【发布时间】:2020-08-07 16:56:22
【问题描述】:
给定一个字符串,我需要删除最小字符并返回已删除字符的索引总和。 假设字符串是 'abcab' 我需要在索引 1 处删除第一个 a。 我们只剩下'bcab'。现在再次删除剩余字符串中最小且位于索引 3 处的 a 我们只剩下'bcb'。 以同样的方式在索引 1 处删除 b,然后在索引 2 处再次从 'cb' 中删除 b,最后删除 c
所有索引的总和为 1+3+1+2+1=8 问题很简单,但我们需要在 O(n) 中完成。为此,我需要删除 O(1) 中的第 k 个元素。在 python del list[index] 中,时间复杂度为 O(n)。 如何使用 python 在恒定时间内删除
编辑
这是一个确切的问题
给定一个大小为 N 的字符串 S。假设 count 等于 0。
您的任务是通过执行以下操作 N 次删除字符串 S 的所有 N 个元素
• 在单个操作中,选择 S 中按字母顺序最小的字符,例如,从 S 中删除并将其索引添加到计数中。如果 c 等多个字符存在,则选择索引最小的那个。
打印count的值。
注意考虑基于 1 的索引
解决T测试用例的问题
输入格式
输入的第一行包含一个整数 T,表示测试用例的数量 • 每个测试用例的第一行包含一个整数 N,表示字符串 S 的大小
• 每个测试用例的第二行包含一个字符串 S
输出格式
为每个测试用例打印一行,其中包含一个表示计数值的整数
1 • S 只包含小写英文字母 所有测试用例的 N 总和不超过 10 示例输入 1 5 abcab 样本输出1 8 解释 操作按以下顺序进行 当前字符串 S= abcab', s 的字母顺序最小的字符是 'a 因为 a 出现了 2 次,我们选择第一次出现。它的索引 1 将被添加到计数中,而 a 将被删除。因此,S变成bcab a will.be 从 5 (bcab) 中删除,3 will.be 添加到 count 第一次出现的 b 将从 (bcb) 中删除,并将 1 添加到 count。 b 将从 s (cb) 中删除,并将 2 添加到 count c 将从 5 (c) 中删除,并将 1 添加到 count
【问题讨论】:
-
字符串是否限于字符
a-z? -
是的,它仅限于 a-z
标签: python-3.x algorithm data-structures time-complexity