1405. Longest Happy String

Link

Solution

Always keep the a > b > c, and then decide which character will be put into the result

    
    public String generateString(int a, int b, int c, String aa, String bb, String cc){
        if(b > a){
            return generateString(b, a, c, bb, aa, cc);
        }
        if(c > b){
            return generateString(a, c, b, aa, cc, bb);
        }
        if(a == 0) return "";
        if(b == 0 && c == 0){
            return aa + (a >= 2 ? aa : "");
        }
        int aaCount = Math.min(a, 2); 
        int bbCount = (a-aaCount >= b ? 1 : 0); //if bbCount = 0, means next run will add "bb"
        
        return aa + (aaCount == 2? aa : "") + (bbCount != 0 ? bb : "") + generateString(a-aaCount, b-bbCount, c, aa ,bb ,cc);
    }
    
    
    
    
    public String longestDiverseString(int a, int b, int c) {
        return generateString(a, b, c, "a", "b", "c");
    }

Last updated

Was this helpful?