现在需要实现一个长链接转短链接的算法。该算法会将原始长链接转换成一个以"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 15:30:08 浏览: 50
你好!为了帮助你实现长链接转短链接的算法,我已经写了一份 Java 代码。代码中包含了两个方法:
1. 将长链接转换为短链接。输入为一个字符串数组表示要映射的长地址,输出为一个字符串数组表示对应的短地址。
2. 将短链接恢复为长链接。输入为一个字符串数组表示要恢复的短地址,输出为一个字符串数组表示对应的长地址。
下面是完整的 Java 代码:
```
import java.util.HashMap;
import java.util.Map;
public class ShortURL {
private static final String BASE_URL = "https://short.url/";
private static final String CHARSET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final long MOD = 56800235584L;
private static final long FACTOR = 64;
private static Map<String, String> shortToLong = new HashMap<>();
private static Map<String, String> longToShort = new HashMap<>();
public static String[] getShortURL(String[] longURLs) {
String[] shortURLs = new String[longURLs.length];
for (int i = 0; i < longURLs.length; i++) {
String longURL = longURLs[i];
if (longToShort.containsKey(longURL)) {
// 如果已经有了这个长链接,直接返回对应的短链接
shortURLs[i] = longToShort.get(longURL);
continue;
}
long key = 1;
// 计算 key 值
for (int j = 0; j < longURL.length(); j++) {
key = (key * FACTOR + (int)longURL.charAt(j)) % MOD;
}
String shortURL = BASE_URL;
// 建立 key