← Static tasks

984. String Without AAA or BBB

leetcode medium

#csharp#leetcode#medium#string

Task

Даны два целых числа a и b, верните любую строку s, такую что:

s имеет длину a + b и содержит ровно a букв 'a' и ровно b букв 'b'.

Подстрока 'aaa' не встречается в s.

Подстрока 'bbb' не встречается в s.

Пример

Input: a = 4, b = 1

Output: "aabaa"

C# solution

matched/original
public class Solution {
    public string StrWithout3a3b(int a, int b) {
        StringBuilder result = new StringBuilder();
        
        while (a > 0 || b > 0) {
            if (result.Length >= 2 && result[result.Length - 1] == result[result.Length - 2]) {
                if (result[result.Length - 1] == 'a') {
                    result.Append('b');
                    b--;
                } else {
                    result.Append('a');
                    a--;
                }
            } else {
                if (a >= b) {
                    result.Append('a');
                    a--;
                } else {
                    result.Append('b');
                    b--;
                }
            }
        }
        
        return result.ToString();
    }
}

C++ solution

auto-draft, review before submit
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string StrWithout3a3b(int a, int b) {
        StringBuilder result = new StringBuilder();
        
        while (a > 0 || b > 0) {
            if (result.size() >= 2 && result[result.size() - 1] == result[result.size() - 2]) {
                if (result[result.size() - 1] == 'a') {
                    result.Append('b');
                    b--;
                } else {
                    result.Append('a');
                    a--;
                }
            } else {
                if (a >= b) {
                    result.Append('a');
                    a--;
                } else {
                    result.Append('b');
                    b--;
                }
            }
        }
        
        return result.ToString();
    }
}

Java solution

auto-draft, review before submit
import java.util.*;
import java.math.*;

// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
    public String StrWithout3a3b(int a, int b) {
        StringBuilder result = new StringBuilder();
        
        while (a > 0 || b > 0) {
            if (result.length >= 2 && result[result.length - 1] == result[result.length - 2]) {
                if (result[result.length - 1] == 'a') {
                    result.Append('b');
                    b--;
                } else {
                    result.Append('a');
                    a--;
                }
            } else {
                if (a >= b) {
                    result.Append('a');
                    a--;
                } else {
                    result.Append('b');
                    b--;
                }
            }
        }
        
        return result.ToString();
    }
}

JavaScript solution

matched/original
var strWithout3a3b = function(a, b) {
    let result = [];
    
    while (a > 0 || b > 0) {
        if (result.length >= 2 && result[result.length - 1] === result[result.length - 2]) {
            if (result[result.length - 1] === 'a') {
                result.push('b');
                b--;
            } else {
                result.push('a');
                a--;
            }
        } else {
            if (a >= b) {
                result.push('a');
                a--;
            } else {
                result.push('b');
                b--;
            }
        }
    }
    
    return result.join('');
};

Explanation

Algorithm

Инициализация переменных:

Завести пустую строку s и переменные a_count и b_count для отслеживания оставшихся 'a' и 'b' соответственно.

Создание строки:

Добавляйте символы в строку s, попеременно добавляя 'a' и 'b', чтобы избегать подстрок 'aaa' и 'bbb'.

Если в строке подряд уже два символа 'a' и осталось ещё 'b', добавьте 'b' и наоборот.

Если оба символа возможны для добавления, выбирайте тот, которого осталось больше.

Добавление оставшихся символов:

После основной логики добавления символов, добавьте оставшиеся 'a' или 'b' в конец строки, если они остались.

😎