2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。
Posted 福大大架构师每日一题
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。相关的知识,希望对你有一定的参考价值。
2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。
福大大 答案2021-08-15:
返回值=上+新-修正。
时间复杂度:O(N)
空间复杂度:O(N)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
s := "aabb"
ret := distinctSubseqII(s)
fmt.Println(ret)
}
func distinctSubseqII(s string) int {
if len(s) == 0 {
return 0
}
m := 1000000007
count := make([]int, 26)
all := 1 // 算空集
for _, x := range s {
add := (all - count[x-'a'] + m) % m
all = (all + add) % m
count[x-'a'] = (count[x-'a'] + add) % m
}
return all - 1
}
func zuo(s string) int {
if len(s) == 0 {
return 0
}
m := 1000000007
map0 := make(map[byte]int)
all := 1 // 一个字符也没遍历的时候,有空集
for i := 0; i < len(s); i++ {
x := s[i]
newAdd := all
curAll := all
curAll = (curAll + newAdd) % m
if _, ok := map0[x]; ok {
curAll = (curAll - map0[x] + m) % m
} else {
curAll = (curAll + m) % m
}
all = curAll
map0[x] = newAdd
}
return all
}
执行结果如下:
以上是关于2021-08-15:给定一个字符串Str,返回Str的所有子序列中有多少不同的字面值。的主要内容,如果未能解决你的问题,请参考以下文章
2021-12-27:给定一个字符串str,和一个正数k, str子序列的字符种数必须是k种,返回有多少子序列满足这个条件。 已知str中都是小写字母, 原始是取mod, 本节在尝试上,最难的, 搞出
2021-08-04:给定一个字符串str,当然可以生成很多子序列。返回有多少个子序列是回文子序列,空序列不算回文。比如,str = “aba”,回文子序列:{a}{a} {a,a} {b}{(代码片
2021-08-30:给定两个字符串str1和str2,在str1中寻找一个最短子串,能包含str2的所有字符,字符顺序无所谓,str1的这个最短子串也可以包含多余的字符。返回这个最短包含子串。(代码
2021-12-02:给定一个字符串str,和一个正数k。 返回长度为k的所有子序列中,字典序最大的子序列。 来自腾讯。