当前位置: 首页 > 面试题库 >

查找给定字符串的下一个更大排列的算法

颜永怡
2023-03-14
问题内容

我想要一个有效的算法来找到给定字符串的下一个更大的排列。


问题答案:

维基百科上有一篇关于词典顺序生成的不错的文章。它还描述了生成下一个排列的算法。

报价:

在给定排列之后,以下算法按字典顺序生成下一个排列。它就地更改给定的排列。

  1. 找到最高指数i,使得s[i] < s[i+1]。如果不存在这样的索引,则该排列为最后的排列。
  2. 找到最高指数j > i,使得s[j] > s[i]。这样一个j必须存在,因为i+1是这样的指标。
  3. s[i]与交换s[j]
  4. 反转索引之后i直到最后一个元素的所有元素的顺序。



 类似资料:
  • 问题内容: 我有绳子。我想通过更改字符串中的字符顺序来从该字符串生成所有排列。例如,说: 我想要的是这样的清单, 目前,我正在迭代字符串的列表强制转换,随机选择2个字母并将它们换位以形成新的字符串,然后将其添加到设置的l强制转换中。根据字符串的长度,我正在计算可能的排列数量,并继续迭代直到集合大小达到极限。必须有更好的方法来做到这一点。 问题答案: itertools模块具有一个有用的方法,称为p

  • 我遇到了一个问题语句,要在给定的两个子字符串之间找到所有公共子字符串这样一种方式,在每种情况下都必须打印最长的子字符串。问题声明如下: 编写一个程序来查找两个给定字符串之间的公共子字符串。但不包括包含在较长公共子字符串中的子字符串。 null 在这种情况下,您不必使用字符串实用程序方法,如:contains、indexOf、StringTokenizer、split和replace。 我的算法是这

  • 本文向大家介绍打印给定字符串的所有排列,包括了打印给定字符串的所有排列的使用技巧和注意事项,需要的朋友参考一下 打印给定字符串的所有排列是回溯问题的一个示例。我们将减小子字符串的大小以解决子问题,然后再次回溯以从该部分获得另一个排列。 例如,如果字符串是ABC,则所有排列将是ABC,ACB,BAC,BCA,CAB,CBA。 该算法的复杂度为O(n!)。这是一个巨大的复杂性。当字符串大小增加时,需要

  • 循环子串: null null null null 示例2: 返回:=>的出现不相邻重复,相邻重复两次 示例3: null null 返回,因为没有重复的相邻子字符串 实现该算法的最佳方法是什么?

  • 问题内容: 找到字符串的所有排列的一种优雅方法是什么。例如,的排列会是和,但是较长的字符串呢?有任何实现示例吗? 问题答案:

  • 问题内容: 在java中查找字符串的所有排列 问题答案: 在这篇文章中,我们将看到如何在 java 中找到 String 的所有排列。 我们将使用一种非常简单的方法来做到这一点。 取出String的第一个字符,递归地插入剩余String的排列的不同位置。 假设您将 String 作为ABC。 所以我们从 ABC 中取出 A 第一个字符 =A 和 RemainingString = BC 因为我们在

  • 本文向大家介绍手写算法:查找一个字符串的最长回文子串相关面试题,主要包含被问及手写算法:查找一个字符串的最长回文子串时的应答技巧和注意事项,需要的朋友参考一下 参考回答:

  • 例如,给定长度=4,排列的可能数目/计数=24,12,6,4,1 1234=24排列 1123=12排列 1122=6排列 1112=4排列 1111=1排列 长度4=24,12,6,4,1 长度5=? 长度6=? 我想强调的是,我只得到了要排列的“字符串长度”,而不是实际的字符串本身。