Generalized Abbreviation
要点:不算难题,注意这类递归的题要按super set的方式(选or不选),而不是combination。比较容易理解。
- 这题的限制条件是abbreviation的部分要连成一片。
- 如果是subset方法,因为是从左向右,所以记录左边的count,然后要不reset,然后填入字母,或者继续count+=1。
- 如果是combination的方法,每选k(k>=0)个进入下一层。注意要在本层把下一个字母加上,下层要从该字母之后开始,这样不会出现连续数字的情况
- 这里涉及一个何时结束的问题。这类题的要点都是在下一个位置更新,因为最后是结束在index==n的位置
- 注意res用+=创建新object比较好,不用考虑backtrack的问题。反正最后也要copy之后添加到solutions里
# Write a function to generate the generalized abbreviations of a word.
# Example:
# Given word = "word", return the following list (order does not matter):
# ["word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", "1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]
class Solution(object):
def generateAbbreviations(self, word):
"""
:type word: str
:rtype: List[str]
"""
def helper(word, res, solutions):
if not word:
solutions.append(res)
return
helper(word[1:], res+word[0], solutions)
for i in xrange(len(word)):
helper(word[i+2:], res+str(i+1)+word[i+1:i+2], solutions)
solutions = []
helper(word, "", solutions)
return solutions
sol = Solution()
assert sol.generateAbbreviations('word')==["word","wor1","wo1d","wo2","w1rd","w1r1","w2d","w3","1ord","1or1","1o1d","1o2","2rd","2r1","3d","4"]