标签:实现 字符串 大于 get 下标 描述 整数 结果 两种
题目描述:
一个 「开心字符串」定义为:
比方说,字符串 "abc","ac","b" 和 "abcbabcbcb" 都是开心字符串,但是 "aa","baa" 和 "ababbc" 都不是开心字符串。
给你两个整数 n 和 k ,你需要将长度为 n 的所有开心字符串按字典序排序。
请你返回排序后的第 k 个开心字符串,如果长度为 n 的开心字符串少于 k 个,那么请你返回空字符串 。
示例 2:
输入:n = 1, k = 4
输出:""
解释:长度为 1 的开心字符串只有 3 个。
示例 3:
输入:n = 3, k = 9
输出:"cab"
解释:长度为 3 的开心字符串总共有 12 个 ["aba", "abc", "aca", "acb", "bab", "bac", "bca", "bcb", "cab", "cac", "cba", "cbc"] 。第 9 个字符串为 "cab"。
示例 5:
输入:n = 10, k = 100
输出:"abacbabacb"
代码:
class Solution: def getHappyString(self, n: int, k: int) -> str: def add(array): #因为k值大小必定是小于等于所有情况数的 #所以,当array长度为1时,此时array值必定只能为‘a‘或‘b‘,只要进行直接更新即可 if len(array)==1: if array[-1]==‘a‘: return [‘b‘] else: return [‘c‘] #当array长度大于1时,就分情况进行讨论 ##第1,2种情况:[a,b],[b,a],直接更新最后一位为‘c‘即可 if (array[-2]==‘a‘ and array[-1]==‘b‘) or (array[-2]==‘b‘ and array[-1]==‘a‘): array[-1]=‘c‘ return array #第3种情况:[c,a],直接更新最后一位为‘b‘即可 elif array[-2]==‘c‘ and array[-1]==‘a‘: array[-1]=‘b‘ return array #第4,5,6种情况:[a,c],[b,c],[c,b],其中[a,c]情况得到的最后一位必定是‘a‘,后两种的最后一位更新情况需要根据倒数第二位决定 else: tmp=add(array[:-1]) return tmp + [‘b‘] if tmp[-1]==‘a‘ else tmp + [‘a‘] #字符串每增加一位长度,情况*2 allCases=3*(2**(n-1)) #判定n,k是否符合条件 if allCases<k or n<1 or k<0: return "" #生成第一种情况的字符串 arr=[‘a‘] for i in range(1,n): arr.append(‘a‘) if arr[-1]!=‘a‘ else arr.append(‘b‘) #循环k-1次得到第k次的结果 for i in range(1,k): arr=add(arr) return ‘‘.join(arr)
LeetCode判定结果:
Leetcode1415-长度为 n 的开心字符串中字典序第 k 小的字符串(Python3实现)
标签:实现 字符串 大于 get 下标 描述 整数 结果 两种
原文地址:https://www.cnblogs.com/lhdb/p/12748395.html