内容与度假的运营人员为了更好的向客户介绍商品信息,往往会在推送的商品简介末尾附带一个有关商品详情的链接。这个链接往往非常长,影响了整体内容的排版,为了给客户更好的体验,现在需要实现一个长链接转短链接的算法。该算法会将原始长链接转换成一个以"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-08 09:44:15 浏览: 67
算法实现如下:
```java
public String[] convertLongToShort(String[] longUrl) {
String[] shortUrl = new String[longUrl.length];
Map<String, String> keyMap = new HashMap<>();
String keyChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < longUrl.length; i++) {
// 计算key值
String url = longUrl[i];
long key = 1;
for (char ch : url.toCharArray()) {
key = (key * 64 + (int)ch) % 56800235584L;
}
// 遇到key值冲突则每次key值加1取余,直到不冲突为止
while (keyMap.containsKey(String.valueOf(key))) {
key = (key + 1) % 56800235584L;
}
// 建立key值与6位字符的映射
StringBuilder sb = new StringBuilder("https://short.url/");
for (int j = 0; j < 6; j++) {
int idx = (int)(key % 62);
sb.append(keyChars.charAt(idx));
key /= 62;
}
// 映射字符不够六位,前面加0
while (sb.length() < "https://short.url/".length() + 6) {
sb.insert(1, '0');
}
String short = sb.toString();
shortUrl[i] = short;
keyMap.put(String.valueOf(key), short);
}
return shortUrl;
}
public String[] convertShortToLong(String[] shortUrl) {
String[] longUrl = new String[shortUrl.length];
Map<String, String> urlMap = new HashMap<>();
for (int i = 0; i < shortUrl.length; i++) {
// 取出6位字符
String key = shortUrl[i].substring("https://short.url/".length());
// 反向计算key值
long num = 0;
for (char ch : key.toCharArray()) {
num = num * 62 + convertToNum(ch);
}
// 查找长地址
longUrl[i] = urlMap.get(String.valueOf(num));
}
return longUrl;
}
public int convertToNum(char ch) {
if (ch >= '0' && ch <= '9') {
return ch - '0';
} else if (ch >= '
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)