算法:根据第一个和最后一个字符连接子字符串

时间:2014-05-12 10:14:00

标签: algorithm

给出了字符串的数量,

我们需要加入所有字符串以制作单个有效字符串

字符串的所有字符都是小写字母 [a-z]

有效字符串表示:

  • 我们需要连接子字符串,其中子字符串的最后一个字母与另一个字母的第一个字母匹配(例如aa ab =>变为aaab // aa ba =>变为baaa)

  • 字符串的所有相同字符都应该相邻。





计算可以生成有效字符串的组合数量。

示例

输入:

array(aa, ab, bc, aa)

期望的输出:

This expression got two possible combinaison.
(since "aa aa ab bc" is deferent from "aa aa ab bc", cause there is two aa, and they must not be considered equals)

我的努力: -

我只知道它的图形问题。 (连接组件问题)。

请帮助我,以便我可以构建此算法。

我需要你的指导,而不是确切的算法。这样我就可以自己构建算法

1 个答案:

答案 0 :(得分:1)

我如何处理这一个:

让我们宣布2个变量:

int factorials_quotient = 1;
int solution_count = 0;

作为一个例子,il将使用字符串:abc cme eqk aa a bb b,因为它是最棘手的案例

  

首先:确定' concat '字符串。

例如:abc cme eqk aa a bb b

自' abc cme eqk'字符串只有一个唯一的顺序,你必须连接它们并将其视为一个唯一的字符串:abccmeeqk aa a bb b。 (对于每个连接,如果第一个字母等于子字符串上的最后一个字母,则会有一个例外情况,您必须处理它。)



  

第二:确定' 阶乘'字符串。

例如:abccmeeqk aa a bb b 我们正在寻找包含相同字符的两个或更多字符串,例如:aa a& bb b(不要计算' abcmeeqk'因为它包含与a不同的字符。)

对于每个字符串乘以factorials_quotient乘以n!

在我们的例子中,我们首先得到aa a,因为我们有2个字符串(a和aa),我们将factorials_quotient乘以factorial(2),然后bb b相同。我们的factorials_quotient现在等于1 * 2! * 2! = 4。

然后将aa连接到abb连接到b

我们现在得到:abccmeeqk aaa bbb



  

第三:如果可能的话,尝试连接 factorials concats

例如,我们没有abccmeeqk aaa bbb

由于abccmeeqka开头,qe必须将aaa放在前面,我们现在得到:aaaabccmeeqk bbb



  

四:得到你的结果

solution_cuount = factorials_quotient * factorial(number of sub-string in our string)

在我们的案例中:aaaabccmeeqk bbb我们有2个子字符串。

solution_count = 4 * 2! = 4 * 2 = 8个解决方案:





可能的解决方案:

aa  a   abc cme eqk bb  b
aa  a   abc cme eqk b   bb
a   aa  abc cme eqk bb  b
a   aa  abc cme eqk b   bb

bb  b   aa  a   abc cme eqk
b   bb  aa  a   abc cme eqk
bb  b   a   aa  abc cme eqk
b   bb  a   aa  abc cme eqk





数组一步一步:

第0步:(开始时)

array(
    "aa",
    "a",
    "abc",
    "cme",
    "eqk",
    "bb",
    "b"
)

第1步:

array(
    "aa",
    "a",
    "abccmeeqk",
    "bb",
    "b"
)

第2步:

array(
    "aaa",
    "abccmeeqk",
    "bbb"
)

第3步:

array(
    "aaaabccmeeqk",
    "bbb"
)

第4步:

you got your result