2021-12-02:给定一个字符串str,和一个正数k。 返回长度为k的所有子序列中,字典序最大的子序列。 来自腾讯。

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-12-02:给定一个字符串str,和一个正数k。 返回长度为k的所有子序列中,字典序最大的子序列。 来自腾讯。相关的知识,希望对你有一定的参考价值。

2021-12-02:给定一个字符串str,和一个正数k。
返回长度为k的所有子序列中,字典序最大的子序列。
来自腾讯。

答案2021-12-02:

单调栈。先进来的元素大,后进来的元素小。
时间复杂度:O(N)。
额外空间复杂度:O(N)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() 
    s := "abcba"
    k := 3
    ret := maxString(s, k)
    fmt.Println(ret)


func maxString(s string, k int) string 
    if k <= 0 || len(s) < k 
        return ""
    
    str := []byte(s)
    n := len(str)
    stack := make([]byte, n)
    size := 0
    for i := 0; i < n; i++ 
        for size > 0 && stack[size-1] < str[i] && size+n-i > k 
            size--
        
        if size+n-i == k 
            ret := stack[0:size]
            ret = append(ret, s[i:]...)
            return string(ret)
        
        stack[size] = str[i]
        size++
    
    return string(stack[0:k])

执行结果如下:


左神java代码

以上是关于2021-12-02:给定一个字符串str,和一个正数k。 返回长度为k的所有子序列中,字典序最大的子序列。 来自腾讯。的主要内容,如果未能解决你的问题,请参考以下文章

2021-12-27:给定一个字符串str,和一个正数k, str子序列的字符种数必须是k种,返回有多少子序列满足这个条件。 已知str中都是小写字母, 原始是取mod, 本节在尝试上,最难的, 搞出

2021-08-30:给定两个字符串str1和str2,在str1中寻找一个最短子串,能包含str2的所有字符,字符顺序无所谓,str1的这个最短子串也可以包含多余的字符。返回这个最短包含子串。(代码

2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,并且没有重合。 返回有几个回文子串。 来

2022-04-07:给定一个只由‘a‘和‘b‘组成的字符串str, str中“ab“和“ba“子串都可以消除, 消除之后剩下字符会重新靠在一起,继续出现可以消除的子串... 你的任务是决定一种消除的

2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由01组成的数组arr,长度为N, arr[i] == 0表示str中i位置的字符不许修改, arr[i] ==

2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。