44
55class Solution {
66
7+ public String trackRoute (String [][] itineraries ) {
8+ String route = "" ;
9+ int itineraryLen = itineraries .length ;
10+
11+ if ( itineraryLen == 1 ) {
12+ return itineraries [0 ][0 ] + ", " + itineraries [0 ][1 ];
13+ }
14+
15+ // 1. Transform to hashmap
16+ // 2. Find starting point
17+ // 3. Make route
18+
19+
20+ // Transform to hashmap
21+ HashMap <String , String > itinerariesMap = new HashMap <>();
22+
23+ for (int i =0 ; i <itineraryLen ; i ++) {
24+ itinerariesMap .put (itineraries [i ][0 ],itineraries [i ][1 ]);
25+ }
26+
27+ // Find starting point
28+ boolean foundStart = false ;
29+ String start = "" ;
30+ for ( int i =0 ; i < itineraryLen && foundStart == false ; i ++ ) {
31+ start = itineraries [i ][0 ];
32+
33+ if ( !itinerariesMap .containsValue (start ) )
34+ foundStart = true ;
35+ }
36+
37+ // Make route
38+ String end = itinerariesMap .get (start );
39+ route += start + ", " + end ;
40+
41+ // As we can take start and end at once,
42+ // find the number of iterations to make
43+ int loop = itineraryLen /2 + itineraryLen %2 - 1 ;
44+
45+ for ( int i =0 ; i <loop ; i ++ ) {
46+ start = itinerariesMap .get (end );
47+ end = itinerariesMap .get (start );
48+ route += ", " + start + ", " + end ;
49+
50+ }
51+
52+ // Last destination is missed when itineraries
53+ // length is even
54+ if ( itineraryLen % 2 == 0 )
55+ route += ", " + itinerariesMap .get (end );
56+
57+ return route ;
58+ }
59+ }
60+
61+ class SolutionLegacy {
62+
763 public String trackRoute (String [][] itineraries ) {
864 int startIndex = this .findStartingIndex (itineraries );
965 return this .createPath (startIndex , itineraries );
1066 }
1167
1268 public int findStartingIndex (String [][] itineraries ) {
69+ int itineraryLen = itineraries .length ;
1370 String start = "" ;
1471 boolean startFound = false ;
1572 int i = 0 ;
1673
17- for (; i < itineraries . length && startFound == false ; i ++) {
74+ for (; i < itineraryLen && startFound == false ; i ++) {
1875 start = itineraries [i ][0 ];
1976 int j = 0 ;
2077
21- for (; j < itineraries . length ; j ++) {
78+ for (; j < itineraryLen ; j ++) {
2279
2380 if (i != j && start == itineraries [j ][1 ]) {
24- j = itineraries . length + 1 ;
81+ j = itineraryLen + 1 ;
2582 }
2683 }
2784
28- if (j == itineraries . length ) {
85+ if (j == itineraryLen ) {
2986 startFound =true ;
3087 }
3188 }
@@ -34,16 +91,17 @@ public int findStartingIndex(String[][] itineraries) {
3491 }
3592
3693 public String createPath (int startIndex , String [][] itineraries ) {
94+ int itineraryLen = itineraries .length ;
3795 String route = itineraries [startIndex ][0 ] + ", " + itineraries [startIndex ][1 ];
3896 String nextStart = itineraries [startIndex ][1 ];
3997 HashMap <Integer , Boolean > traversedIndex = new HashMap <Integer , Boolean >();
4098 traversedIndex .put (startIndex , true );
4199
42- for (int l = 0 ; l < itineraries . length +1 ; l ++) {
100+ for (int l = 0 ; l < itineraryLen +1 ; l ++) {
43101
44102 if ( traversedIndex .containsKey (l ) == false ) {
45103 int m = 0 ;
46- for (; m < itineraries . length ; m ++) {
104+ for (; m < itineraryLen ; m ++) {
47105
48106 if ( traversedIndex .containsKey (m ) == false
49107 && nextStart == itineraries [m ][0 ]) {
0 commit comments