Space-efficient data structures for string searching and retrieval