U面经Prepare: Web Address
题目是给你一堆域名,其中一些是另一些的parent,比如.com是.youku.com的parent,然后.youku.com是.service.youku.com的parent这样,然后再给你一个网址,让你在那堆域名中找到这个网址的parent里面最长的一个,然后再往前退一个返回。语言有点不好描述,举个栗子: Domains:[
“.com”,
“.cn”
“.service.com”
“.net”
“.youku.net”
]
.
url: “yeah.hello.youku.net” 这里.net和.youku.net都是这个url的parent,其中最长的是.youku.net,再往前退一个是hello,所以返回“hello.youku.net”
虽然我觉得这道题用set倒着来就可以解决,但是看到一个Trie的做法也很不错
这里TrieNode.val不再是char, 而是String. children array也变成了Map<String, TrieNode>
public class LongestSubDomain {
private class TrieNode {
String str;
Map<String, TrieNode> map;
boolean isLeaf;
public TrieNode(String str) {
this.str = str;
this.map = new HashMap<>();
this.isLeaf = false;
}
}
TrieNode root = new TrieNode("#");
public static void main(String[] args) {
LongestSubDomain lsd = new LongestSubDomain();
String[] domains = {".com", ".cn", ".service.com", ".net", ".youku.net"};
String url = "yeah.hello.youku.net";
for (String str : domains) {
lsd.insert(str);
}
String res = lsd.startWith(url);
System.out.println(res);
}
public void insert(String domain) {
String[] temp = domain.split("\\.");
TrieNode node = root;
for (int i = temp.length - 1; i >= 0; i--) {
if (temp[i].length() == 0) continue;
if (node.map.containsKey(temp[i])) {
node = node.map.get(temp[i]);
} else {
TrieNode newNode = new TrieNode(temp[i]);
node.map.put(temp[i], newNode);
node = newNode;
}
}
node.isLeaf = true;
}
public String startWith(String url) {
String[] temp = url.split("\\.");
TrieNode node = root;
String res = "";
int index = temp.length - 1;
for (int i = temp.length - 1; i >= 0; i--) {
if (temp[i].length() == 0) continue;
if (node.map.containsKey(temp[i])) {
res = "." + temp[i] + res;
node = node.map.get(temp[i]);
} else {
if (!node.isLeaf) {
res = "";
} else {
index = i;
}
break;
}
}
return temp[index] + res;
}
}
我的做法:
package uberOnsite;
import java.util.*;
public class LongestParent {
public class TrieNode {
String val;
Map<String, TrieNode> children;
boolean end;
public TrieNode(String str) {
val = str;
children = new HashMap<String, TrieNode>();
end = false;
}
}
TrieNode root = new TrieNode("");
public void insert(String str) {
String[] arr = str.split("\\.");
TrieNode node = root;
for (int i=arr.length-; i>=; i--) {
if (arr[i].length() == ) continue;
if (!node.children.containsKey(arr[i])) {
node.children.put(arr[i], new TrieNode(arr[i]));
}
node = node.children.get(arr[i]);
}
node.end = true;
}
public String findLongest(String str) {
String[] input = str.split("\\.");
TrieNode node = root;
StringBuffer res = new StringBuffer();
for (int i=input.length-; i>=; i--) {
String cur = input[i];
if (node.children.containsKey(cur)) {
res.insert(, cur);
res.insert(, ".");
node = node.children.get(cur);
}
else {
res.insert(, cur);
return res.toString();
}
}
return "";
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LongestParent sol = new LongestParent();
String[] domains = {".com", ".cn", ".service.com", ".net", ".youku.net"};
String url = "yeah.hello.youku.net";
for (String each : domains) {
sol.insert(each);
}
String res = sol.findLongest(url);
System.out.println(res);
}
}
U面经Prepare: Web Address的更多相关文章
- VS Extension: Open Web Address with Visual Studio Browser
使用VS 打开链接 using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; ... public ...
- Some web Address
1.可视化算法(Data Structure Visualizations) https://www.cs.usfca.edu/~galles/visualization/Algorithms.htm ...
- SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
错误描述 This page can’t be displayed •Make sure the web address http://centeradmin is correct. •Look fo ...
- ASP.NET Web API 实例
ASP.NET Web API 入门大杂烩 创建Web API解决方案,命名为VCoinWebApi,并且创建了同名的Project,然后,创建一个Empty Project:Models,创建一个W ...
- Understanding Responsive Web Design: Cross-browser Compatibility
http://www.sitepoint.com/understanding-responsive-web-design-cross-browser-compatibility/ In the las ...
- SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
错误描写叙述 This page can't be displayed •Make sure the web address http://centeradmin is correct. •Look ...
- kubernetes使用Traefik暴露web服务-转载51cto
Traefix介绍(摘自网络) traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持:同 nginx 等相比,traefik 能够自动感知后端容器 ...
- Accepting PayPal in games(完整的Paypal在Unity的支付)
Hello and welcome back to my blog! In this article I’m going to talk about the process of acceptin ...
- CentOS6.5上Zabbix3.0的RPM安装【一】-安装并配置Server
一.Environment OS:CentOS6.5 64bit [桌面版安装] Server端:192.168.201.109 ServerName Clinet端:192.168.201.199 ...
随机推荐
- tensorflow例子-【老鱼学tensorflow】
本节主要用一个例子来讲述一下基本的tensorflow用法. 在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律 ...
- Codeforces 755F PolandBall and Gifts bitset + 二进制优化多重背包
PolandBall and Gifts 转换成置换群后, 对于最大值我们很好处理. 对于最小值, 只跟若干个圈能否刚好组能 k 有关. 最直观的想法就是bitset优化背包, 直接搞肯定T掉. 我们 ...
- 查看CentOS版本信息
今天小编将给大家详细讲解查看CentOS版本信息的命令. (一) 查看已经安装的CentOS版本信息 1.cat /etc/issue 查看版本 cat 缩写concatenate cat命令可以 ...
- CodeForces 553E Kyoya and Train 动态规划 多项式 FFT 分治
原文链接http://www.cnblogs.com/zhouzhendong/p/8847145.html 题目传送门 - CodeForces 553E 题意 一个有$n$个节点$m$条边的有向图 ...
- 即将上线的Imcash是何方神圣?
区块链的诞生,让数字资产来到这个时代,每个人的财产分布又多了一种十分重要的选择. 当下每个人最需要的就是一款优秀的数字资产管理平台,目前市面上各种平台层出不穷,在线管理.离线管理.全节点钱包.轻钱包. ...
- elk安装时最常见的报错
1.在启动kibana的时候报一下错误 max file descriptors [4096] for elasticsearch process likely too low, increase t ...
- .Net Core 部署到IIS
微软官方教程: https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x 在vs中创建.net cor ...
- 双接口(回调)promise cb
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- BZOJ 4763
有毒 第一开始一直RE,我就把dfs改成了bfs 结果一直TLE,自己造的数据要跑8s 因为 lxl 等人讲随机 $\sqrt{n}$ 个点作为关键点就可以了 但是我把随机改成深度有关就AC了,而且那 ...
- 关于在虚拟机上安装ubuntu输入不了中文的问题
打开终端后,无法输入中文,按照网络上的教程 1.安装语言包 System Settings–>Language Support–>Install/Remove Languages 选中ch ...