| 
					
				 | 
			
			
				@@ -0,0 +1,35 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type strslice []string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (ss strslice) Len() int           { return len(ss) } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (ss strslice) Less(i, j int) bool { return len(ss[j]) < len(ss[i]) } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (ss strslice) Swap(i, j int)      { ss[i], ss[j] = ss[j], ss[i] } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func findLUSlength(strs []string) int { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sort.Sort(strslice(strs)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m := make(map[string]int) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := range strs { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m[strs[i]]++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := range strs { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if val, _ := m[strs[i]]; val == 1 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			j := 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for ; j < i && !isSubstr(strs[j], strs[i]); j++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if j == i { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return len(strs[i]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return -1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func isSubstr(s, t string) bool { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	i, j, m, n := 0, 0, len(s), len(t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	s1, s2 := []rune(s), []rune(t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for ; i < m && j < n; j++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for ; i < m && s1[i] != s2[j]; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		i++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return i <= m && j == n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |