当前位置:网站首页>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];
}
}
边栏推荐
- 【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
- [Seaborn] combination chart: pairplot and jointplot
- SIGGRAPH 2022最佳技术论文奖重磅出炉!北大陈宝权团队获荣誉提名
- skimage学习(2)——RGB转灰度、RGB 转 HSV、直方图匹配
- 麒麟信安加入宁夏商用密码协会
- How to add aplayer music player in blog
- 管理VDI的几个最佳实践
- Lex & yacc of Pisa proxy SQL parsing
- 防火墙系统崩溃、文件丢失的修复方法,材料成本0元
- skimage学习(3)——使灰度滤镜适应 RGB 图像、免疫组化染色分离颜色、过滤区域最大值
猜你喜欢
鲲鹏开发者峰会2022 | 麒麟信安携手鲲鹏共筑计算产业新生态
Shallow understanding Net core routing
Pycharm IDE下载
QML初学
【视频/音频数据处理】上海道宁为您带来Elecard下载、试用、教程
麒麟信安加入宁夏商用密码协会
Leetcode brush questions day49
PLC:自动纠正数据集噪声,来洗洗数据集吧 | ICLR 2021 Spotlight
Matplotlib绘图界面设置
Skimage learning (3) -- adapt the gray filter to RGB images, separate colors by immunohistochemical staining, and filter the maximum value of the region
随机推荐
The server is completely broken and cannot be repaired. How to use backup to restore it into a virtual machine without damage?
MySQL usage notes 1
First in China! Todesk integrates RTC technology into remote desktop, with clearer image quality and smoother operation
Flash build API Service - generate API documents
How to mount the original data disk without damage after the reinstallation of proxmox ve?
LeetCode 403. 青蛙过河 每日一题
[image sensor] correlated double sampling CDs
Skimage learning (2) -- RGB to grayscale, RGB to HSV, histogram matching
浅谈 Apache Doris FE 处理查询 SQL 源码解析
QML beginner
【饭谈】那些看似为公司着想,实际却很自私的故事 (一:造轮子)
管理VDI的几个最佳实践
Reflections on "product managers must read: five classic innovative thinking models"
99% 用户在 Power BI 云端报表常犯错误
With the latest Alibaba P7 technology system, mom doesn't have to worry about me looking for a job anymore
AI来搞财富分配比人更公平?来自DeepMind的多人博弈游戏研究
Sator launched Web3 game "satorspace" and launched hoobi
如何选择合适的自动化测试工具?
LeetCode 1477. 找两个和为目标值且不重叠的子数组 每日一题
skimage学习(3)——Gamma 和 log对比度调整、直方图均衡、为灰度图像着色