encode-and-decode-tinyurl py3

This commit is contained in:
Sangeeth Sudheer 2022-04-24 02:10:44 +05:30
parent 731af263a4
commit 60066617e3
3 changed files with 67 additions and 1 deletions

View File

@ -41,7 +41,7 @@ const $ch = cheerio.load(q.content);
$ch("pre").wrapInner("<code></code>");
const td = new Turndown({});
const mdBody = td.turndown($ch("body").html());
const mdBody = td.turndown($ch("body").html()) + `\n\n${link}`;
await $`mkdir -p ${solutionDir}`;
await $`touch ${solutionFilePath}`;

View File

@ -0,0 +1,29 @@
> Note: This is a companion problem to the [System Design](https://leetcode.com/discuss/interview-question/system-design/) problem: [Design TinyURL](https://leetcode.com/discuss/interview-question/124658/Design-a-URL-Shortener-(-TinyURL-)-System/).
TinyURL is a URL shortening service where you enter a URL such as `https://leetcode.com/problems/design-tinyurl` and it returns a short URL such as `http://tinyurl.com/4e9iAk`. Design a class to encode a URL and decode a tiny URL.
There is no restriction on how your encode/decode algorithm should work. You just need to ensure that a URL can be encoded to a tiny URL and the tiny URL can be decoded to the original URL.
Implement the `Solution` class:
* `Solution()` Initializes the object of the system.
* `String encode(String longUrl)` Returns a tiny URL for the given `longUrl`.
* `String decode(String shortUrl)` Returns the original long URL for the given `shortUrl`. It is guaranteed that the given `shortUrl` was encoded by the same object.
**Example 1:**
Input: url = "https://leetcode.com/problems/design-tinyurl"
Output: "https://leetcode.com/problems/design-tinyurl"
Explanation:
Solution obj = new Solution();
string tiny = obj.encode(url); // returns the encoded tiny url.
string ans = obj.decode(tiny); // returns the original url after deconding it.
**Constraints:**
* `1 <= url.length <= 104`
* `url` is guranteed to be a valid URL.
https://leetcode.com/problems/encode-and-decode-tinyurl

View File

@ -0,0 +1,37 @@
# NOTE: This one is an open-ended question, and relevant to system design. Refer
# the notes.
import string
import random
class Codec:
store = {}
base = 'https://tiny.url/'
def encode(self, longUrl: str) -> str:
"""Encodes a URL to a shortened URL.
"""
tiny = None
while True:
tiny = ''.join(random.choices(string.ascii_letters + string.digits, k = 5))
if tiny not in self.store:
break
self.store[tiny] = longUrl
return f'{self.base}{tiny}'
def decode(self, shortUrl: str) -> str:
"""Decodes a shortened URL to its original URL.
"""
_, tiny = shortUrl.split(self.base)
return self.store[tiny]
# Your Codec object will be instantiated and called as such:
# codec = Codec()
# codec.decode(codec.encode(url))