時間:2023-02-03 19:52:01 | 來源:建站知識
時間:2023-02-03 19:52:01 來源:建站知識
"discuss.leetcode.com"
由多個子域名組成。頂級域名為 "com"
,二級域名為 "leetcode.com"
,最低一級為 "discuss.leetcode.com"
。"discuss.leetcode.com"
時,同時也會隱式訪問其父域名 "leetcode.com"
以及 "com"
。"rep d1.d2.d3"
或 "rep d1.d2"
格式的一個域名表示,其中 rep
表示訪問域名的次數(shù),d1.d2.d3
為域名本身。"9001 discuss.leetcode.com"
就是一個 計數(shù)配對域名 ,表示 discuss.leetcode.com
被訪問了 9001
次。cpdomains
,解析得到輸入中每個子域名對應的 計數(shù)配對域名 ,并以數(shù)組形式返回??梢园?任意順序 返回答案。輸入:cpdomains = ["9001 discuss.leetcode.com"]輸出:["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"]解釋:例子中僅包含一個網(wǎng)站域名:"discuss.leetcode.com"。按照前文描述,子域名 "leetcode.com" 和 "com" 都會被訪問,所以它們都被訪問了 9001 次。
示例 2:輸入:cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]輸出:["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]解釋:按照前文描述,會訪問 "google.mail.com" 900 次,"yahoo.com" 50 次,"intel.mail.com" 1 次,"wiki.org" 5 次。而對于父域名,會訪問 "mail.com" 900 + 1 = 901 次,"com" 900 + 50 + 1 = 951 次,和 "org" 5 次。
提示:cpdomain[i]
會遵循 "repi d1i.d2i.d3i"
或 "repi d1i.d2i"
格式repi
是范圍 [1, 10^4] 內(nèi)的一個整數(shù)cpdomains
為 ss
。idx
代指掃描到的游標位置),先通過指針掃描找到訪問數(shù)字部分 cnt = ss[i][0:idx]
,然后「從后往前」處理 ss[i] 的 [idx + 1, n - 1] 部分,按照域名層級「從小到大」的順序進行截取,并累加訪問次數(shù) cnt
到當前域名。class Solution { public List<String> subdomainVisits(String[] ss) { Map<String, Integer> map = new HashMap<>(); for (String s : ss) { int n = s.length(), idx = 0; while (idx < n && s.charAt(idx) != ' ') idx++; int cnt = Integer.parseInt(s.substring(0, idx)); int start = idx + 1; idx = n - 1; while (idx >= start) { while (idx >= start && s.charAt(idx) != '.') idx--; String cur = s.substring(idx + 1); map.put(cur, map.getOrDefault(cur, 0) + cnt); idx--; } } List<String> ans = new ArrayList<>(); for (String key : map.keySet()) ans.add(map.get(key) + " " + key); return ans; }}
TypeScript 代碼:function subdomainVisits(ss: string[]): string[] { const map = new Map<string, number>() for (const s of ss) { let n = s.length, idx = 0 while (idx < n && s[idx] != ' ') idx++ const cnt = Number(s.substring(0, idx)) const start = idx + 1; idx = n - 1 while (idx >= start) { while (idx >= start && s[idx] != '.') idx-- const cur = s.substring(idx + 1) if (!map.has(cur)) map.set(cur, 0) map.set(cur, map.get(cur) + cnt) idx-- } } const ans = new Array<string>() for (const key of map.keys()) ans.push(map.get(key) + " " + key) return ans};
Python 代碼:class Solution: def subdomainVisits(self, ss: List[str]) -> List[str]: mapping = defaultdict(int) for s in ss: n, idx = len(s), 0 while idx < n and s[idx] != ' ': idx += 1 cnt = int(s[:idx]) start, idx = idx + 1, n - 1 while idx >= start: while idx >= start and s[idx] != '.': idx -= 1 mapping[s[idx + 1:]] += cnt idx -= 1 return [f'{v} {k}' for k, v in mapping.items()]
No.811
篇,系列開始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道題目,部分是有鎖題,我們將先把所有不帶鎖的題目刷完。關鍵詞:運用,簡單,訪問
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。