आसान 0 हल किए गए 0% स्वीकृति

Event Subscribers

Deliver events to the subscribers of each topic, observer style, and count what everyone receives.

आप क्या सीखेंगे

  • Map topics to the people who follow them
  • Notify every subscriber of an event
  • Ignore duplicate subscriptions with a set

समस्या

अनुवाद दिखाएँ

The observer pattern lets objects subscribe to a subject and get notified whenever something happens. Here, people subscribe to topics and every published event goes to everyone subscribed to its topic.

Each subscription is <person> <topic>. A repeated subscription has no extra effect. Then each event in events is a topic name: every subscriber of that topic receives one notification. Events on topics nobody follows are dropped.

Implement event_subscribers(subscriptions, events).

Input

subscriptions: "<person> <topic>" strings (names have no spaces).

events: Topic names, in publishing order.

Output

Return "<person>:<count>" for every person who has at least one subscription, sorted by name (ordinal character order).

सीमाएँ

1 ≤ number of subscriptions ≤ 10,000

0 ≤ number of events ≤ 100,000

उदाहरण

उदाहरण 1
इनपुट:
events = ["news", "sports", "weather"]
subscriptions = ["bob sports", "alice news", "alice sports"]

अपेक्षित आउटपुट:
expected = ["alice:2", "bob:1"]
इनपुट:
std::vector<std::string> events = {"news", "sports", "weather"};
std::vector<std::string> subscriptions = {"bob sports", "alice news", "alice sports"};

अपेक्षित आउटपुट:
std::vector<std::string> expected = {"alice:2", "bob:1"};
इनपुट:
string[] events = new string[] {"news", "sports", "weather"};
string[] subscriptions = new string[] {"bob sports", "alice news", "alice sports"};

अपेक्षित आउटपुट:
string[] expected = new string[] {"alice:2", "bob:1"};

व्याख्या

alice follows news and sports, so she gets both events; bob only gets sports; nobody follows weather: ["alice:2", "bob:1"].

उदाहरण 2
इनपुट:
events = []
subscriptions = ["zoe tech", "zoe tech"]

अपेक्षित आउटपुट:
expected = ["zoe:0"]
इनपुट:
std::vector<std::string> events = {};
std::vector<std::string> subscriptions = {"zoe tech", "zoe tech"};

अपेक्षित आउटपुट:
std::vector<std::string> expected = {"zoe:0"};
इनपुट:
string[] events = new string[] {};
string[] subscriptions = new string[] {"zoe tech", "zoe tech"};

अपेक्षित आउटपुट:
string[] expected = new string[] {"zoe:0"};

व्याख्या

The repeated subscription counts once, and no events were published: ["zoe:0"].

कैसे हल करें

पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।

संकेत 1

Group subscribers by topic so each event finds its audience quickly.

संकेत 2

Use a set per topic so a repeated subscription counts once.

संकेत 3

Everyone who subscribed appears in the result, even with zero notifications.

अपेक्षित जटिलता

O(subscriptions + events × subscribers per topic) time, O(subscriptions) extra space

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।