一个 「开心字符串」定义为:
仅包含小写字母 ['a', 'b', 'c'].
对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。
比方说,字符串 "abc","ac","b" 和 "abcbabcbcb" 都是开心字符串,但是 "aa","baa" 和 "ababbc" 都不是开心字符串。给你两个整数 n 和 k ,你需要将长度为 n 的所有开心字符串按字典序排序。
请你返回排序后的第 k 个开心字符串,如果长度为 n 的开心字符串少于 k 个,那么请你返回 空字符串 。
1.回溯算法
class Solution:
def getHappyString(self, n: int, k: int) -> str:
tmp=[]
def dfs(i,s):
if i<0:return
if len(s)==n:
tmp.append(''.join(s))
return
for one in ['a','b','c']:
if s and s[-1]!=one:dfs(i-1,s+[one])
else:dfs(i-1,[one])
dfs(n,[])
return tmp[k-1] if k<=len(tmp) else ""