解题思路
本题是固定长度分块 + 块内去重(保留最后出现)+ 拼接,可按以下步骤处理:
- 按 n 分块:从下标 0 开始,每次取长度为 n 的子串;最后一块长度 ≤n。
- 块内去重:对当前块,记录每个字符最后一次出现的下标;从左到右扫描,仅保留下标等于「最后出现位置」的字符(等价于删去所有更早的重复)。
- 拼接:将各块处理结果按顺序连接即为答案。
常见假解:
题目内容
给定一个字符串 s,以及字符串子串的长度 n,要求:
- 把 s 按照 n 的长度进行字符串子串拆分;
- 每个子串不允许出现重复的字符,如果出现,则保留最后一个,例如 "aba" 处理后会变成 "ba",因为第一个 'a' 出现重复,因此第一个 'a' 被删除,保留了最后一个 'a';
- 字符串 s 的长度不一定恰好是 n 的倍数,最后一个数据包可能少于 n 个字符,但处理规则不变;
最后把所有子串再次拼接,输出一个新的字符串。
输入描述
- 第一行输入一个字符串 s,字符串不为空且仅包含小写字母,长度不超过 1000。
- 第二行输入一个整数 n (1≤n≤1000),表示子串的长度。
输出描述
样例1
输入
"abaabacbda",3
输出
"babacbda"
说明
原始字符串分成 4 个子串: "aba"、"aba"、"cbd"、"a"。
- "aba" 处理为 "ba"
- "aba" 处理为 "ba"
- "cbd" 处理为 "cbd"
- "a" 处理为 "a"
拼接得到 "ba" + "ba" + "cbd" + "a" = "babacbda"。
样例2
输入
"aaabbb",2
输出
"aabb"
说明
原始字符串分成 3 个子串: "aa"、"ab"、"bb"。
- "aa" 处理为 "a"
- "ab" 处理为 "ab"
- "bb" 处理为 "b"拼接得到"a"+"ab"+"b"="aabb$"。
样例3
输入
"a",1
输出
"a"
说明
只有 1 个字符,结果为 "a"
样例4
输入
"a",1000
输出
"a"
说明
只有 1 个字符,结果为 "a"