O(|S|)