Challenge 1: Borrow, Don't Move — Possible Solution ==================================================================== fn count_words(s: &String) -> usize { s.split_whitespace().count() } fn main() { let sentence = String::from("the quick brown fox jumps"); let count1 = count_words(&sentence); println!("Word count: {}", count1); let count2 = count_words(&sentence); println!("Word count again: {}", count2); } WHY THIS WORKS AS AN ANSWER ------------------------------ count_words takes &String — an immutable REFERENCE, not an owned String — so calling it never moves sentence's ownership away from main, exactly this chapter's fix for Chapter 3's takes_ownership problem. Because sentence is only ever borrowed (never moved), it remains fully valid after the first call — proven directly by calling count_words(&sentence) a SECOND time, which would be a compile error ("value used after move") if the first call had taken ownership instead of borrowing. Both calls succeed and both print the same count, since split_whitespace().count() simply reads the string's contents without needing to own or modify it.