当前位置:网站首页>LeetCode 535(C#)
LeetCode 535(C#)
2022-07-07 15:38:00 【有趣就行】
题目
TinyURL 是一种 URL 简化服务, 比如:当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk 。请你设计一个类来加密与解密 TinyURL 。
加密和解密算法如何设计和运作是没有限制的,你只需要保证一个 URL 可以被加密成一个 TinyURL ,并且这个 TinyURL 可以用解密方法恢复成原本的 URL 。
实现 Solution 类:
Solution() 初始化 TinyURL 系统对象。
String encode(String longUrl) 返回 longUrl 对应的 TinyURL 。
String decode(String shortUrl) 返回 shortUrl 原本的 URL 。题目数据保证给定的 shortUrl 是由同一个系统对象加密的。
示例:
输入:url = “https://leetcode.com/problems/design-tinyurl”
输出:“https://leetcode.com/problems/design-tinyurl”
解释:
Solution obj = new Solution();
string tiny = obj.encode(url); // 返回加密后得到的 TinyURL 。
string ans = obj.decode(tiny); // 返回解密后得到的原本的 URL 。
代码
- 直接寻址(哈希)
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];
}
}
- 拉链寻址(哈希)
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];
}
}
边栏推荐
- Lowcode: four ways to help transportation companies enhance supply chain management
- QT中自定义控件的创建到封装到工具栏过程(二):自定义控件封装到工具栏
- LeetCode 213. Home raiding II daily question
- SlashData开发者工具榜首等你而定!!!
- LeetCode 1626. 无矛盾的最佳球队 每日一题
- 99% 用户在 Power BI 云端报表常犯错误
- First in China! Todesk integrates RTC technology into remote desktop, with clearer image quality and smoother operation
- LeetCode 1696. 跳跃游戏 VI 每日一题
- 麒麟信安中标国网新一代调度项目!
- mysql官网下载:Linux的mysql8.x版本(图文详解)
猜你喜欢
Module VI
Master this promotion path and share interview materials
skimage学习(3)——Gamma 和 log对比度调整、直方图均衡、为灰度图像着色
QT中自定义控件的创建到封装到工具栏过程(一):自定义控件的创建
麒麟信安操作系统衍生产品解决方案 | 存储多路径管理系统,有效提高数据传输可靠性
Sator a lancé le jeu web 3 "satorspace" et a lancé huobi
PLC: automatically correct the data set noise, wash the data set | ICLR 2021 spotlight
专精特新软件开发类企业实力指数发布,麒麟信安荣誉登榜
Sator推出Web3游戏“Satorspace” ,并上线Huobi
Sator推出Web3遊戲“Satorspace” ,並上線Huobi
随机推荐
How to add aplayer music player in blog
QT video transmission
LeetCode 1049. 最后一块石头的重量 II 每日一题
[Seaborn] combination chart: facetgrid, jointgrid, pairgrid
With the latest Alibaba P7 technology system, mom doesn't have to worry about me looking for a job anymore
What is cloud computing?
如何选择合适的自动化测试工具?
Flash build API service
LeetCode 1031. Maximum sum of two non overlapping subarrays
Rpcms method of obtaining articles under the specified classification
Direct dry goods, 100% praise
LeetCode 403. Frog crossing the river daily
Reflections on "product managers must read: five classic innovative thinking models"
专精特新软件开发类企业实力指数发布,麒麟信安荣誉登榜
LeetCode 1155. N ways to roll dice one question per day
邮件服务器被列入黑名单,如何快速解封?
On Apache Doris Fe processing query SQL source code analysis
[video / audio data processing] Shanghai daoning brings you elecard download, trial and tutorial
【黄啊码】为什么我建议您选择go,而不选择php?
Leetcode brush questions day49