如何找到字符串可能具有的对的最大值?

时间:2015-04-05 10:42:10

标签: algorithm optimization max

你给了两个s:N和K.Lun狗对满足以下条件的字符串感兴趣:

  • 该字符串恰好有N个字符,每个字符都是' A'或者' B'。
  • 字符串s可以具有K对(i,j)(0 <= i

N个字符串的K的最大值是什么?

2 个答案:

答案 0 :(得分:4)

我们可以假设&#39; A&#39;在B&#39;之前,因为在每个解决方案中我们都可以重新排序&#39; A&#39;到字符串的开头并获得相同或更大数量的对。例如&#39; BAA&#39;没有配对,&#39; ABA&#39;有一对和AAB&#39;有两对。

如果我们在开头有a Ab B则我们有K = a * b对。因此,我们需要优化K = a * b给定a + b = N

如果N是偶数,那么我们就有了:

  

a = b = N / 2,K = N * N / 4

如果N奇怪,我们有:

  

a =(N - 1)/ 2,b =(N + 1)/ 2,K =(N * N - 1)/ 4

答案 1 :(得分:0)

这看起来如何?

function createString(N, K) {
    const res = Array(N).fill('a');
    let i = 1, start = 1, end = N, pairs = 0;

    while (pairs < K && start < end) {
        res[i - 1] = 'a';
        res[i] = 'b';
        pairs++;
        i++;

        if (i === end) {
            start++;
            end--;
            i = start;
        }
    }

    return pairs < K ? '' : res.join('');
}