5 ç¨æ·èªå®ä¹çé¾æ¥
å®ç°ä¸ä¸ªé¡¾å®¢çç½åï¼ä½¿å¾é¡¾å®¢è½åç«ä»ä»¬èªå·±ççç½åãå³ä½ éè¦å¨åæåºç¡ä¸åå®ç°ä¸ä¸ª â
âcreateCustomâ
âã
éå®ç°ä¸ä¸ªæ¹æ³ï¼
- â
ââ æä¸ä¸ªé¿ç½å转æ¢æä¸ä¸ªä»¥ââlong2Short(url)â
âå¼å¤´ççç½åâhttp://tiny.url/â
- â
â æä¸ä¸ªçç½å转æ¢æä¸ä¸ªé¿ç½åâshort2Long(url)â
- â
ââ 设å®ä¸ä¸ªé¿ç½åççç½å为ââcreateCustom(url, key)â
ââ +ââhttp://tiny.url/â
ââkeyâ
注æï¼
- â
ââ çæççç½åçkeyçé¿åº¦åºè¯¥çäº6 ï¼ä¸ç®ååååææ ï¼ã å¯ä»¥ä½¿ç¨çå符åªæââlong2Shortâ
ââãå¦:ââ[a-zA-Z0-9]â
ââabcD9Eâ
- ä»»æ两个é¿çurlä¸ä¼å¯¹åºæåä¸ä¸ªçurlï¼åä¹äº¦ç¶
- å¦æâ
ââ ä¸è½å®æç¨æ·ææç设å®, é£ä¹åºè¯¥è¿åââcreateCustomâ
â, åä¹å¦ææåå°é¿ç½åä¸çç½å对åºï¼åºè¯¥è¿åè¿ä¸ªçç½åâ"error"â
5.1 åºäº Base62
å¨URLTableéï¼ç´æ¥æ°å¢ä¸åcustom_urlè®°å½å¯¹åºçcustom urlæ¯å¦å¯è¡ï¼
ä¸å¯è¡ï¼å¯¹äºå¤§é¨åæ°æ®ï¼è¯¥åå ¶å®é½ä¸ºç©ºï¼å°±ä¼æµªè´¹åå¨ç©ºé´ã
æ°å¢ä¸ä¸ªè¡¨ï¼åå¨èªå®ä¹ URLï¼CustomURLTableã
å建èªå®ä¹çé¾æ¥ï¼å¨ CustomURLTable ä¸æ¥è¯¢åæå ¥
æ ¹æ®é¿é¾æ¥å建æ®éçé¾æ¥ï¼
- å æ¥è¯¢CustomURLTableæ¯å¦åå¨
- åå¨URLTableæ¥è¯¢åæå ¥
ååæä¸æ ·ï¼ç¨ä¸¤ä¸ªåå¸è¡¨å¤çé¿ç½ååçç½åä¹é´çç¸äºæ å°å ³ç³»ãéé¢å¤å¤ççæ¯ç¨æ·è®¾å®çç½åä¸å·²æå²çªæ¶ï¼éè¿å âerrorâã注æï¼è¥ç¨æ·è®¾å®çåå·²ææ°å¥½ç¸åï¼ååæ ·åºè¯¥è¿åçç½åã
public class TinyUrl2 {
private HashMap<String,String> s2l = new HashMap<String,String>();
private HashMap<String,String> l2s = new HashMap<String,String>();
private int cnt = 0;
private final StringBuffer tinyUrl = new StringBuffer("http://tiny.url/");
private final String charset = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM";
private String newShortUrl() {
StringBuffer res = new StringBuffer();
for (int i = 0, j = cnt; i < 6; i++, j /= 62)
res.append(charset.charAt(j % 62));
cnt++;
return tinyUrl + res.toString();
}
/*
* @param long_url: a long url
* @param key: a short key
* @return: a short url starts with http://tiny.url/
*/
public String createCustom(String long_url, String key) {
String short_url = tinyUrl + key;
if (l2s.containsKey(long_url)) {
if (l2s.get(long_url).equals(short_url))
return short_url;
else
return "error";
}
if (s2l.containsKey(short_url))
return "error";
l2s.put(long_url, short_url);
s2l.put(short_url, long_url);
return short_url;
}
/*
* @param long_url: a long url
* @return: a short url starts with http://tiny.url/
*/
public String longToShort(String long_url) {
if (l2s.containsKey(long_url))
return l2s.get(long_url);
String short_url = newShortUrl();
l2s.put(long_url, short_url);
s2l.put(short_url, long_url);
return short_url;
}
/*
* @param short_url: a short url starts with http://tiny.url/
* @return: a long url
*/
public String shortToLong(String short_url) {
if (s2l.containsKey(short_url))
return s2l.get(short_url);
return "error";
}
}
5.2 åºäºéæºçæç®æ³
- ââhttps://www.zhihu.com/question/29270034ââ