3734.大于目标字符串的最小字典序回文排列:超越双100%的屎山代码(别看了)
【LetMeFly】3734.大于目标字符串的最小字典序回文排列:超越双100%的屎山代码(别看了)
力扣题目链接:https://leetcode.cn/problems/lexicographically-smallest-palindromic-permutation-greater-than-target/
给你两个长度均为 n 的字符串 s 和目标字符串 target,它们都由小写英文字母组成。
返回 字典序 最小的字符串 ,该字符串 既 是 s 的一个 回文 排列 ,又是字典序 严格 大于 target 的。如果不存在这样的排列,则返回一个空字符串。
如果字符串 a 和字符串 b 长度相同,在它们首次出现不同的位置上,字符串 a 处的字母在字母表中的顺序晚于字符串 b 处的对应字母,则字符串 a 在 字典序上严格大于 字符串 b。
排列 是指对字符串中所有字符的重新排列。
如果一个字符串从前向后读和从后向前读都一样,则该字符串是 回文 的。
示例 1:
输入:s = "baba", target = "abba"
输出:"baab"
解释:
s的回文排列(按字典序)是"abba"和"baab"。- 字典序最小的、且严格大于
target的排列是"baab"。
示例 2:
输入:s = "baba", target = "bbaa"
输出:""
解释:
s的回文排列(按字典序)是"abba"和"baab"。- 它们中没有一个在字典序上严格大于
target。因此,答案是""。
示例 3:
输入:s = "abc", target = "abb"
输出:""
解释:
s 没有回文排列。因此,答案是 ""。
示例 4:
输入:s = "aac", target = "abb"
输出:"aca"
解释:
s唯一的回文排列是"aca"。"aca"在字典序上严格大于target。因此,答案是"aca"。
提示:
1 <= n == s.length == target.length <= 300s和target仅由小写英文字母组成。
解题方法:屎山堆积
先看昨天的不考虑回文串的【LetMeFly】3720.大于目标字符串的最小字典序排列:状态机 —— :从左往右枚举,失败则退回(最多退回一次),本题只考虑前半个回文串的话和上一题几乎一模一样,不同之处在于上一题填到最后一个字符时候不能两字符串完全相等,这一题填到最后一个字符为止两字符串完全相等的话,中间(如果含)和后面的字符串可能s比target大。
- 时间复杂度$O(len(s)\times C)$,其中$C=26$
- 空间复杂度$O(C)$
AC代码
C++
1 | |
可能做这道题的人比较少吧:
- 执行用时分布 0 ms 击败 100.00%
- 消耗内存分布 9.84 MB 击败 100.00%
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源