984. String Without AAA or BBB

Given two integers a and b, return any string s such that:

  • s has length a + b and contains exactly a 'a' letters, and exactly b 'b' letters,
  • The substring 'aaa' does not occur in s, and
  • The substring 'bbb' does not occur in s.

 

Example 1:

Input: a = 1, b = 2
Output: "abb"
Explanation: "abb", "bab" and "bba" are all correct answers.

Example 2:

Input: a = 4, b = 1
Output: "aabaa"

 

Constraints:

  • 0 <= a, b <= 100
  • It is guaranteed such an s exists for the given a and b.

Rust Solution

struct Solution;

impl Solution {
    fn str_without3a3b(mut a: i32, mut b: i32) -> String {
        if a == b {
            let mut res = "".to_string();
            for _ in 0..a {
                res += "ab";
            }
            return res;
        }
        if a > b {
            let mut res = "".to_string();
            while a > 0 {
                res += "a";
                a -= 1;
                if a > b {
                    res += "a";
                    a -= 1;
                }
                if b > 0 {
                    res += "b";
                    b -= 1;
                }
            }
            return res;
        }
        if b > a {
            let mut res = "".to_string();
            while b > 0 {
                res += "b";
                b -= 1;
                if b > a {
                    res += "b";
                    b -= 1;
                }
                if a > 0 {
                    res += "a";
                    a -= 1;
                }
            }
            return res;
        }
        "".to_string()
    }
}

#[test]
fn test() {
    let a = 1;
    let b = 2;
    let res = "bab".to_string();
    assert_eq!(Solution::str_without3a3b(a, b), res);
}

Having problems with this solution? Click here to submit an issue on github.