当前位置:网站首页>LeetCode 535(C#)
LeetCode 535(C#)
2022-07-07 19:17:00 【Just be interesting】
subject
TinyURL It's a kind of URL Simplify services , such as : When you enter a URL https://leetcode.com/problems/design-tinyurl when , It will return a simplified URL http://tinyurl.com/4e9iAk . Please design a class to encrypt and decrypt TinyURL .
There is no limit to how encryption and decryption algorithms are designed and operated , You just need to guarantee one URL Can be encrypted into a TinyURL , And this TinyURL It can be restored to the original by decryption URL .
Realization Solution class :
Solution() initialization TinyURL System object .
String encode(String longUrl) return longUrl Corresponding TinyURL .
String decode(String shortUrl) return shortUrl The original URL . The subject data guarantees a given shortUrl Is encrypted by the same system object .
Example :
Input :url = “https://leetcode.com/problems/design-tinyurl”
Output :“https://leetcode.com/problems/design-tinyurl”
explain :
Solution obj = new Solution();
string tiny = obj.encode(url); // Returns the result of encryption TinyURL .
string ans = obj.decode(tiny); // Returns the original after decryption URL .
Code
- Direct addressing ( Hash )
public class Codec
{
private const int K1 = 10007;
private const int K2 = 1000000007;
private Dictionary<string, int> url2Key = new Dictionary<string, int>();
private Dictionary<int, string> key2Url = new Dictionary<int, string>();
// Encodes a URL to a shortened URL
public string encode(string longUrl)
{
if (url2Key.ContainsKey(longUrl))
return "http://tinyurl.com/" + url2Key[longUrl];
int key = 0;
long b = 1;
foreach (char c in longUrl)
{
key = (int)((long)key * b + c) % K2;
b = (b * K1) % K2;
}
while (key2Url.ContainsKey(key))
key++;
url2Key.Add(longUrl, key);
key2Url.Add(key, longUrl);
return "http://tinyurl.com/" + key;
}
// Decodes a shortened URL to its original URL.
public string decode(string shortUrl)
{
int idx = shortUrl.LastIndexOf('/') + 1;
int key = int.Parse(shortUrl[idx..]);
return key2Url[key];
}
}
- Zipper addressing ( Hash )
public class Codec
{
private const int K1 = 10007;
private const int K2 = 1000000007;
private Dictionary<string, (int, int)> url2Key =
new Dictionary<string, (int, int)>();
private Dictionary<int, IList<string>> key2Url =
new Dictionary<int, IList<string>>();
// Encodes a URL to a shortened URL
public string encode(string longUrl)
{
if (url2Key.ContainsKey(longUrl))
{
var key = url2Key[longUrl];
return "http://tinyurl.com/" + key.Item1.ToString() + '.' + key.Item2.ToString();
}
int key1 = 0;
long P = 1;
foreach (char c in longUrl)
{
key1 = (int)((long)(key1 * P + c) % K2);
P = P * K1 % K2;
}
if (!key2Url.ContainsKey(key1)) key2Url.Add(key1, new List<string>());
key2Url[key1].Add(longUrl);
int key2 = key2Url[key1].Count - 1;
url2Key.Add(longUrl, (key1, key2));
return "http://tinyurl.com/" + key1.ToString() + '.' + key2.ToString();
}
// Decodes a shortened URL to its original URL.
public string decode(string shortUrl)
{
string[] strs = shortUrl[(shortUrl.LastIndexOf('/') + 1)..].Split('.');
int key1 = int.Parse(strs[0]);
int key2 = int.Parse(strs[1]);
return key2Url[key1][key2];
}
}
边栏推荐
- 链式二叉树的基本操作(C语言实现)
- Wechat web debugging 8.0.19 replace the X5 kernel with xweb, so the X5 debugging method can no longer be used. Now there is a solution
- POJ 2392 Space Elevator
- 6.关于jwt
- 解决rosdep的报错问题
- Key points of anti reptile: identifying reptiles
- How to implement safety practice in software development stage
- SD_ DATA_ SEND_ SHIFT_ REGISTER
- Hongmeng smart home [1.0]
- 解决远程rviz报错问题
猜你喜欢
随机推荐
Teach your sister to write the message queue hand in hand
Hutool - lightweight DB operation solution
數據驗證框架 Apache BVal 再使用
Reject policy of thread pool
Big Ben (Lua)
3. About cookies
高温火烧浑不怕,钟薛高想留清白在人间
LeetCode 497(C#)
Embedded interview questions (algorithm part)
Key points of anti reptile: identifying reptiles
2022-07-04 matlab reads video frames and saves them
SD_ DATA_ SEND_ SHIFT_ REGISTER
[Tawang methodology] Tawang 3W consumption strategy - U & a research method
3.关于cookie
脑洞从何而来?加州大学最新研究:有创造力的人神经连接会「抄近道」
First time in China! The language AI strength of this Chinese enterprise is recognized as No.2 in the world! Second only to Google
Charles+Postern的APP抓包
【Base64笔记】「建议收藏」
超分辨率技术在实时音视频领域的研究与实践
Business experience in virtual digital human








