pub fn longest_non_repeat(string: &str) -> Result<(usize,String),String> {
if string.is_empty() {
return Err("Cannot identify longest non repeat on an empty string!".to_string());
}
let chars: Vec<char> = string.chars().collect();
let mut longest_substring = String::new();
let mut seen: std::collections::HashSet<char> = std::collections::HashSet::new();
let mut start_index = 0;
for i in 0..chars.len() {
while seen.contains(&chars[i]) {
seen.remove(&chars[start_index]);
start_index += 1;
}
seen.insert(chars[i]);
let candidate: String = chars[start_index..=i].iter().collect();
if candidate.len() > longest_substring.len() {
longest_substring = candidate;
}
}
Ok((longest_substring.len(),longest_substring))
}