【发布时间】:2021-04-06 18:13:13
【问题描述】:
我正在努力解决并在 C 中实现一个作为输入的函数 一个“字符串”,它包含字符“a”或“b”(输入字符串可能完全包含字符“a”和“b”),函数的作用是 将字符串分成三个部分,每个排列/集合没有 NULL/空字符在每个排列/集合。的长度 排列/集合不一定相等,但它们(每个集合/排列的所有三个部分)都具有相同的 字符 'a' 的出现/出现次数。 该函数必须返回我们可以在每个可能的集合/排列中将字符串除以 3 的最大可能性。
示例: #1 输入字符串:“ababa”有 4 种排列/集合的可能性(正如我所说的,每个排列包含 3 个部分,如果没有 3 个部分,则丢弃这种可能性!),在这种情况下,最大可能性是: (ab,a,ba) , (a,bab,a) , (a,ba,ba) ,(ab,ab,a)。
#2 输入字符串:“bbbbb”有 6 种排列/集合的可能性(正如我所说的,每个排列包含 3 个部分,如果没有 3 个部分,则丢弃这种可能性!),在这种情况下,最大可能性是:(小心这里'a'是o没有出现所以在每个排列/集合中没有'a'并且每个集合都相等-没有'a'-) (bb,b,bb) , (bbb,b,b) , (bb,bb,b) ,(b,bbb,b),(b,bb,bb),(b,b,bbb)。
#3 输入字符串:'ababb' 有 0 种可能性,因此该函数返回空字符串或 NULL 或 " " 甚至可以返回我们想要的任何内容,类似于此字符串没有可能性。
我正在努力用 C 语言实现这个功能,我坚持了大约三天。 我开始考虑用递归方法解决这个问题,因为我们正在讨论排列和最大可能性。 所以我深思熟虑并开始使用我的算法: 第一个条件是检查: 'a' % 3 == 0 对于一个 permutation/set 的每 3 个部分。 (套装包括 3 个部分) 然后思考另一个条件的递归规则是什么(字符串的长度> 3)。 但我卡住了,我无法完成我不知道如何继续,请帮忙?最难的是发现我的问题的递归规则及其边缘条件。
有什么帮助吗?!
非常感谢。
【问题讨论】:
-
这些东西不叫排列,而是叫分区。 “排列”这个词是为别的东西保留的。
-
你想只输出可能性的数量,还是打印不同的分区?
-
@Damien 打印所有不同的可能集合分区。 (每个可能性都有一组3个分区,尽可能被分区)
-
@n.'pronouns'm。抱歉,错过了..所以是分区。
标签: c algorithm permutation software-design