Skip to content

Latest commit

 

History

History
45 lines (38 loc) · 1.41 KB

1370. 上升下降字符串.md

File metadata and controls

45 lines (38 loc) · 1.41 KB
/** 
 * @description  要是有一个升序数组,让我能来回遍历几次,就可以得到答案了.
*               可以使用hashMap,对象,数组这样的结构去描述这个升序的"数组",这里我使用了数组.
 * @param {string} s
 * @return {string}
 */
var sortString = function (s) {

    const { length } = s;
    // 先给字符串s排个序,sorted是一个数组,数组的下标表示字符,数组下标对应的值表示字符出现的次数
    const sorted = s.split('').reduce((sorted, value) => {
        const key = value.charCodeAt() - 97;
        sorted[key] = (sorted[key] || 0) + 1;
        return sorted;
    }, []);

    let results = '';

    // 从sorted中收集字符到results
    const collection = (results, value, index, array) => {
        if (value > 0) {
            results += String.fromCharCode(index + 97);
            array[index] = value - 1;
        }
        return results;
    };

    while (results.length < length) {
        // 收集升序的字符
        results = sorted.reduce(collection, results);
        // 如果第一次就选完了s中的全部字符串
        if (results.length >= length) {
            return results;
        }
        // 收集降序的字符
        results = sorted.reduceRight(collection, results);
    }

    return results;
};