Skip to content

Latest commit

 

History

History
63 lines (50 loc) · 1.55 KB

1487. 保证文件名唯一.md

File metadata and controls

63 lines (50 loc) · 1.55 KB
  • 哈希表(模拟行为, 效率非常低下)
function getFolderNames(names: string[]): string[] {
    const folderNames: string[] = [],
        folderSets: Set<string> = new Set<string>();

    for (const name of names) {
        const folderName: string = addFolderName(folderSets, name);
        folderNames.push(folderName);
    }

    return folderNames;
};

function addFolderName(folderSets: Set<string>, name: string): string {
    let folderName: string = name;

    if (!folderSets.has(folderName)) {
        folderSets.add(folderName);
        return folderName;
    }

    // 添加文件后缀(k)
    let k: number = 0;

    do {
        k++;
        folderName = `${name}(${k})`;
    } while (folderSets.has(folderName));

    folderSets.add(folderName);

    return folderName;
}
  • 哈希表(别人家的代码)
/**
 *
 * @description 传说中的别人家的代码,直接搬运过来的,写的很优雅了
 * @see https://leetcode-cn.com/problems/making-file-names-unique/solution/1487-bao-zheng-wen-jian-ming-wei-yi-by-tuotuoli/
 * @param {string[]} names
 * @return {*}  {string[]}
 */
function getFolderNames(names: string[]): string[] {
    const map: { [key: string]: number } = Object.create(null);
    return names.map(name => {
        let folderName = name;
        while (folderName in map) {
            folderName = `${name}(${map[name]})`;
            ++map[name];
        }
        map[folderName] = 1;
        return folderName;
    });
};