677. Map Sum Pairs

Der Aufgabentext wird für die gewählte Sprache aus dem Russischen übersetzt. Code bleibt unverändert.

Создайте карту, которая позволяет выполнять следующие действия:

Отображает строковый ключ на заданное значение.

returns сумму значений, у которых ключ имеет префикс, равный заданной строке.

Реализуйте класс MapSum:

MapSum() Инициализирует объект MapSum.

void insert(String key, int val) Вставляет пару ключ-значение в карту. Если ключ уже существовал, исходная пара ключ-значение будет заменена на новую.

int sum(string prefix) returns сумму всех значений пар, у которых ключ начинается с данного префикса.

Beispiel:

Input

["MapSum", "insert", "sum", "insert", "sum"]

[[], ["apple", 3], ["ap"], ["app", 2], ["ap"]]

Output

[null, null, 3, null, 5]

Explanation

MapSum mapSum = new MapSum();

mapSum.insert("apple", 3);

mapSum.sum("ap"); // return 3 (apple = 3)

mapSum.insert("app", 2);

mapSum.sum("ap"); // return 5 (apple + app = 3 + 2 = 5)

C# Lösung

zugeordnet/original
using System;
using System.Collections.Generic;
class MapSum {
    private Dictionary<string, int> map;
    public MapSum() {
        map = new Dictionary<string, int>();
    }
    public void Insert(string key, int val) {
        map[key] = val;
    }
    public int Sum(string prefix) {
        int ans = 0;
        foreach (var kvp in map) {
            if (kvp.Key.StartsWith(prefix)) {
                ans += kvp.Value;
            }
        }
        return ans;
    }
}

C++ Lösung

Auto-Entwurf, vor dem Einreichen prüfen
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class MapSum {
    private unordered_map<string, int> map;
    public MapSum() {
        map = new unordered_map<string, int>();
    }
    public void Insert(string key, int val) {
        map[key] = val;
    }
    public int Sum(string prefix) {
        int ans = 0;
        foreach (var kvp in map) {
            if (kvp.Key.StartsWith(prefix)) {
                ans += kvp.Value;
            }
        }
        return ans;
    }
}

Java Lösung

zugeordnet/original
import java.util.HashMap;

class MapSum {
    HashMap<String, Integer> map;
    public MapSum() {
        map = new HashMap<>();
    }
    public void insert(String key, int val) {
        map.put(key, val);
    }
    public int sum(String prefix) {
        int ans = 0;
        for (String key: map.keySet()) {
            if (key.startsWith(prefix)) {
                ans += map.get(key);
            }
        }
        return ans;
    }
}

JavaScript Lösung

zugeordnet/original
class MapSum {
    constructor() {
        this.map = new Map();
    }
    insert(key, val) {
        this.map.set(key, val);
    }
    sum(prefix) {
        let ans = 0;
        for (let [key, val] of this.map) {
            if (key.startsWith(prefix)) {
                ans += val;
            }
        }
        return ans;
    }
}

Python Lösung

zugeordnet/original
class MapSum:
    def __init__(self):
        self.map = {}
    def insert(self, key: str, val: int) -> None:
        self.map[key] = val
    def sum(self, prefix: str) -> int:
        return sum(val for key, val in self.map.items() if key.startswith(prefix))

Go Lösung

zugeordnet/original
package main

import "strings"

type MapSum struct {
    mapData map[string]int
}

func Constructor() MapSum {
    return MapSum{mapData: make(map[string]int)}
}

func (this *MapSum) Insert(key string, val int) {
    this.mapData[key] = val
}

func (this *MapSum) Sum(prefix string) int {
    ans := 0
    for key, val := range this.mapData {
        if strings.HasPrefix(key, prefix) {
            ans += val
        }
    }
    return ans
}

Algorithm

Для каждого ключа в карте проверить, начинается ли этот ключ с данного префикса.

Если ключ начинается с префикса, добавить его значение к ответу.

Вернуть полученную сумму как результат.

😎

Stellen zu dieser Aufgabe

aktive Stellen with overlapping task tags are angezeigt.

Alle Stellen
Es gibt noch keine aktiven Stellen.