【Lintcode】1789. Distinguish Username

記錄演算法發表於2020-12-03

題目地址:

https://www.lintcode.com/problem/distinguish-username/description

給定一個字串陣列 A A A,要求返回一個同長的陣列 B B B,使得 B [ i ] B[i] B[i] A [ i ] A[i] A[i]拼接上其前面的子陣列裡其出現的次數。次數是 0 0 0則省略。

思路是雜湊表,記錄每個字串出現次數。程式碼如下:

import java.util.HashMap;
import java.util.Map;

public class Solution {
    /**
     * @param names: a string array
     * @return: the string array
     */
    public String[] DistinguishUsername(String[] names) {
        // Write your code here
        String[] res = new String[names.length];
        Map<String, Integer> map = new HashMap<>();
        
        for (int i = 0; i < names.length; i++) {
            map.put(names[i], map.getOrDefault(names[i], 0) + 1);
            int val = map.get(names[i]);
            
            res[i] = val > 1 ? names[i] + (val - 1) : names[i];
        }
        
        return res;
    }
}

時間複雜度 O ( n l ) O(nl) O(nl) n n n是陣列長度, l l l是最長字串長度。

相關文章