现在需要实现一个长链接转短链接的算法。该算法会将原始长链接转换成一个以"https://short.url/"开头的、后接6位映射字符的短链接。算法描述如下: ① 计算key值。key初始为1,每次与64相乘后,和网址每一位字符的ASCII值相加,并每次对56800235584取余。 ② 遇到key值冲突则每次key值加1取余,直到不冲突为止。 ③ 建立key值与6位字符的映射。每一位依次从后往前是key对62取余后在字典"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"中对应的字符,每取一次后key值整除62再取。 ④ 映射字符不够六位,前面加'0'。 输入一个字符串数组表示要映射的长地址,第二个字符串数组表示要恢复的短地址,请将长地址转换成短地址,短地址转换成长地址。(要恢复的短地址一定是第一个数组的长地址转换过去的) 示例1 输入:["http:www.baidu.com","http://www.nowcoder.com"],["http://tiny.urleNm26h"] 返回值:["http://tiny.urleNm26h","http://tiny.urlJc7hPD","http:www.baidu.com"]用java代码实现
时间: 2023-02-14 20:28:35 浏览: 76
长链接转短链接
4星 · 用户满意度95%
这里是一个用 Java 实现的代码例子。这个代码实现了将长链接转换成以 "https://short.url/" 开头的 6 位映射字符的短链接的功能,并且能够将短链接恢复成原始的长链接。
```
import java.util.HashMap;
public class ShortenUrl {
// 字典,用于建立 key 值与 6 位字符的映射
private static final String DICTIONARY = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 长度为 62 的字典的长度
private static final int DICTIONARY_LEN = DICTIONARY.length();
// 使用 long 类型的数值,可以存储更大的数值
private static final long MOD = 56800235584L;
// 使用 HashMap 存储长链接到短链接的映射
private static HashMap<String, String> longToShortMap = new HashMap<>();
// 使用 HashMap 存储短链接到长链接的映射
private static HashMap<String, String> shortToLongMap = new HashMap<>();
/**
* 将长链接转换成以 "https://short.url/" 开头的 6 位映射字符的短链接
* @param longUrl 长链接
* @return 转换后的短链接
*/
public static String shorten(String longUrl) {
// 先检查是否已经存在长链接到短链接的映射
if (longToShortMap.containsKey(longUrl)) {
// 如果已经存在,直接返回短链接
return longToShortMap.get(longUrl);
}
// 计算 key 值
long key = 1;
for (char c : longUrl.toCharArray()) {
key = (key * 64 + c) % MOD
阅读全文