持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
1436. 旅行终点站
给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。
题目数据保证线路图会形成一条不存在循环的线路,因此恰有一个旅行终点站。
「示例1:」
输入:paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
输出:"Sao Paulo"
解释:从 "London" 出发,最后抵达终点站 "Sao Paulo" 。本次旅行的路线是 "London" -> "New York" -> "Lima" -> "Sao Paulo" 。
「示例2:」
输入:paths = [["B","C"],["D","B"],["C","A"]]
输出:"A"
解释:所有可能的线路是:
"D" -> "B" -> "C" -> "A".
"B" -> "C" -> "A".
"C" -> "A".
"A".
显然,旅行终点站是 "A" 。
「示例3:」
输入:paths = [["A","Z"]]
输出:"Z"
「提示:」
1. 1 <= paths.length <= 100
2. paths[i].length == 2
3. 1 <= cityAi.length, cityBi.length <= 10
4. cityAi != cityBi
5. 所有字符串均由大小写英文字母和空格字符组成。
解题思路
首先,对于一个paths[i] = [cityAi, cityBi],若该城市出现在cityAi中,则必定定会通向cityBi;同时终点站肯定会在cityBi中;
所以,我们只要找到cityBi中没有在cityAi中出现过的即可;
具体实现:
将所有起点放入集合set中;
遍历所有终点,不在集合中的就是终点站;
代码实现
/**
* @param {string[][]} paths
* @return {string}
*/
const destCity = paths => {
const set = new Set();
const len = paths.length;
for (let i = 0; i < len; i++) {
// 将所有起点放入集合
set.add(paths[i][0]);
}
for (let i = 0; i < len; i++) {
// 遍历所有终点,不在集合中的就是终点站
if (!set.has(paths[i][1])) return paths[i][1];
}
};
如果你对这道题目还有疑问的话,可以在评论区进行留言;