【发布时间】:2021-04-27 13:26:07
【问题描述】:
您必须确定不同于“abcdefghijklmnopqrstuvwxyz”的特殊字母顺序。给你一个小写字符串,由字母“a”到“z”组成,最多 10000 个字符。您被要求确定重复这种特殊的字母顺序以生成给定字符串的最少次数。请注意,当您说出字母表时,您可以跳过某些字符(即,使用字母表的子序列)。
我的目标是有效地找到最佳的字母顺序,并计算产生给定字符串所需的重复次数。
示例:“cdadabcc”
答案:4
您得到 4,因为通过将字母表重新排序为:
cdabefghijklmnopqrstuvwxyz
第一次说字母表时,你说特殊排序的前三个字母“cdaefghijklmnopqrstuvwxyz”或“cda”,但跳过“b”和其余字符。下一次,你跳过说“c”和说“dab”,然后跳过剩下的字符。第三次,您说“c”并跳过剩余的字符。最后一次,您说“c”并跳过剩余的字符。
时间;特殊字母的一部分;总字符串
1; CDAbefghijklmnopqrstuvwxyz;光盘
2; cDABefghijklmnopqrstuvwxyz; cdadab
3; Cdabefghijklmnopqrstuvwxyz; cdadabc
4; Cdabefghijklmnopqrstuvwxyz; cdadabcc
示例 2:“abcdefdeff”
答案:3
将字母表改写为:
abcdefghijklmnopqrstuvwxyz
时间;特殊字母的一部分;总字符串
1; ABCDEFghijklmnopqrstuvwxyz; abcdef
2; abcDEFghijklmnopqrstuvwxyz; abcdefdef
3; abcdeFghijklmnopqrstuvwxyz; abcdefdeff
我该如何解决这个问题?如果我能确定字母表的特殊顺序,就很容易确定需要重复多少次才能生成字符串。为了确定这个顺序,我尝试使用动态规划并以类似于最长递增子序列问题的方式使用它。
【问题讨论】:
标签: string algorithm optimization language-agnostic dynamic-programming