Since s is a reference, s[..1] would extract a 1-element subslice in an array of references, not the first element of whatever s refers to. So the first problem is that you are working with the reference, a usize value in this case, rather than indirecting through the reference to the string. The second problem is that s is not declared as a type that supports slice extraction, such as an array or vec, so slice extraction is invalid. The third problem is that type inference would make temp_s be a reference (or actually a length-1 array of references) rather than a string character, since temp_s will be the same type as s[..1].
However, there's an even earlier problem in your code: you extract the first four bytes from hello, which is a UTF-8 string. Suppose that string were "你好", which means "hello" in Chinese. One or both of those characters might encode in three bytes, which means that your extraction of the first four bytes could truncate in the middle of the second character. That's why indexing by integers is not defined on Rust strings.
Because, according to Index docs and SliceIndex docs they refer to, if s has type &str, s[range] has type str, and str is an unsized type - just a bunch of bytes, in fact, with the additional requirement of being valid UTF-8.
s[..1] has type str, so &s[..1] has type &str. More correctly, it has type &'a str for some unnamed lifetime 'a, derived from the reference's usage.
If you have a serious question abouy a different topic, first search this forum for existing threads on that topic. If no thread is appropriate or your question isn't answered, create a new thread focused on that topic. Don't hijack threads devoted to other topics.