Firstly, I have converted their example in unit tests. Having a look at them should be clear what they mean for "stepwise".
def test_provided_1(self): result = solution('cat dog hello') self.assertEqual('h *e **l ***l ****o', result) def test_provided_2(self): result = solution('stop football play') self.assertEqual('f *o **o ***t ****b *****a ******l *******l', result) def test_provided_3(self): result = solution('music is my life') self.assertEqual('m *u **s ***i ****c', result)Then, I have divided the problem in two parts. Finding the longest word, and then converting a word in the weird format required.
The longest word could be found in linear time. It is just a matter of keeping track of the currently found solution, comparing its size against the other candidates until a better solution is found or we reach the end of the list:
def get_longest_word(line): words = line.split() selected = '' for word in words: if len(word) > len(selected): selected = word return selectedI get the "stepwise" format by concatenating a growing number of stars followed by the actual character for each step, and then pushing the result in a temporary list. Finally, I join the list on a blank to get the expected string:
result =  for i in range(len(word)): result.append('*' * i + word[i]) return ' '.join(result)I submitted successfully my solution to CodeEval, and then I have pushed to GitHub both the unit test and the python3 source file.