Super Reduced String

  • + 0 comments

    Here's my solution in typescript. Strings are immutable in JS and I don't think creating an array is efficient using String.prototype.split('') and then again converting it into a string using Array.prototype.join([ ])

    function superReducedString(s: string): string {
        const [reducedString, cannotBeReducedFurther] = reduceString(s);
        if (cannotBeReducedFurther) {
            return reducedString || 'Empty String';
        }
        return superReducedString(reducedString);
    }
    
    function reduceString(s: string): [string, boolean] {
        let idx = 0;
        let result = '';
        let noAdjacentCharactersFound = true;
        while (idx < s.length) {
            if (s.charAt(idx) === s.charAt(idx + 1)) {
                idx += 2;
                noAdjacentCharactersFound = false;
            } else {
                result += s.charAt(idx++);
            }
        }
        return [result, noAdjacentCharactersFound];
    }