zoukankan      html  css  js  c++  java
  • 1415. 长度为 n 的开心字符串中字典序第 k 小的字符串

    一个 「开心字符串」定义为:

    仅包含小写字母 ['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:

    输入:n = 1, k = 3
    输出:"c"
    解释:列表 ["a", "b", "c"] 包含了所有长度为 1 的开心字符串。按照字典序排序后第三个字符串为 "c" 。
    示例 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"
    示例 4:

    输入:n = 2, k = 7
    输出:""
    示例 5:

    输入:n = 10, k = 100
    输出:"abacbabacb"
     

    提示:

    1 <= n <= 10
    1 <= k <= 100

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/the-k-th-lexicographical-string-of-all-happy-strings-of-length-n
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    第一个字母对应3种选择,第二个,第三个分别对应2种选择

    class Solution:
        def getHappyString(self, n: int, k: int) -> str:
            res=[]
            m=1<<(n-1)
            if k<=m:
                res.append('a')
            elif k<=2*m:
                res.append('b')
                k-=m
            elif k<=3*m:
                res.append('c')
                k-=2*m
            else:
                return ''
            m>>=1
            while m:
                if k<=m:
                    res.append('b' if res[-1]=='a' else 'a')
                else:
                    res.append('b' if res[-1]=='c' else 'c')
                    k-=m
                m>>=1
            
            return ''.join(res)

  • 相关阅读:
    django项目环境搭建备忘
    Python IDE的选择和安装
    MAC上python环境搭建
    hadoop1.2.1+hbase0.90.4+nutch2.2.1+elasticsearch0.90.5配置(伪分布式)
    ubuntu下hadoop完全分布式部署
    ubuntu下集群设置静态ip
    C语言调用库函数实现生产者消费者问题
    poj 1703(带权并查集)
    poj 1330
    poj1724
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13829846.html
Copyright © 2011-2022 走看看