C (gcc), 41 36 bytes
f(char*_){_=!_[1]||*_/32+*++_&f(_);} -5 eliminated &1 starting off from an idea from Peter Cordes; changed operators (precedence) to remove parentheses
Uses ~. Checks the first and sixth bits of the first two characters' binary representations:
_ 1011111 \ 1011100 / 101111 ~ 1111110 ^ ^ and traverses the string recursively.
(*_ / 32) & 1 is true only for chars that end high, while *_ & 1 is true only for chars that start low. (x&1) ^ (y&1) == (x+y)&1. XOR is add-without-carry, and carry doesn't disturb the lowest bit. The 1 comes from the f(_) return value, if the rest of the string was stringy.