def title_case(s):
    """Convert a string to have title case."""
    if not s:
        return None

    s = s.lower()
    parts = s.split(' ')
    lower_case = (
        'a', 'an', 'and', 'as', 'at', 'by', 'for', 'in', 'of', 'on', 'or',
        'the', 'to', 'with'
    )

    parts[0] = parts[0].title()
    parts = map(
        lambda part: part.title() if part not in lower_case else part,
        parts
    )

    return ' '.join(parts)