2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数
因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。
字符串的 子序列 是经由原字符串删除一些(也可能不删除)字符
但不改变剩余字符相对位置的一个新字符串。
输入: s = “abc”。
输出: 7。

答案2022-10-01:

dp[0~25],保存26个字母结尾的子序列个数。
时间复杂度:O(N)。
空间复杂度:O(1)。

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

use std::collections::HashMap;
fn main() {
let ans = distinct_subseq_ii("bccaccbaabbc");
println!("ans = {}", ans);
let ans = zuo("bccaccbaabbc");
println!("ans = {}", ans);
} fn distinct_subseq_ii(s: &str) -> i32 {
if s.len() == 0 {
return 0;
}
let m = 1000000007;
let str2: Vec<u8> = s.bytes().collect();
// a -> 0 ->
// b -> 1 ->
// c -> 2 ->
// z -> 25 ->
// count[i] = 0
let mut count = [0; 26];
// { }
let mut all = 1; // 算空集
for x in str2.iter() {
// x
// 纯新增
// add = all - count[x]
// all += add
// count[x] + add
let add = (all - count[(*x - 'a' as u8) as usize] + m) % m;
all = (all + add) % m;
count[(*x - 'a' as u8) as usize] = (count[(*x - 'a' as u8) as usize] + add) % m;
}
// {} 去掉!
return all - 1;
}
fn zuo(s: &str) -> i32 {
if s.len() == 0 {
return 0;
}
let m = 1000000007;
let str2: Vec<u8> = s.bytes().collect();
let mut map: HashMap<u8, i32> = HashMap::new();
let mut all = 1; // 一个字符也没遍历的时候,有空集
for x in str2.iter() {
let new_add = all;
// int curAll = all + newAdd - (map.containsKey(x) ? map.get(x) : 0);
let mut cur_all = all;
cur_all = (cur_all + new_add) % m;
cur_all = (cur_all
- if map.contains_key(x) {
*map.get(x).unwrap()
} else {
0
}
+ m)
% m;
all = cur_all;
map.insert(*x, new_add);
}
return all - 1;
}

执行结果如下:


左神java代码

2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数 因为结果可能很大,所以返回答案需要对 10^9 + 7 取余 。 字符串的 子序列 是经由原字符串删除一些(也可能不删除的更多相关文章

  1. py-统计一个矩阵中每一列的非0数的个数

    1.文件类型类似于这样: 不过数据量比这个要更大一点. 2.对应上述数据的运行结果: import matplotlib.pyplot as plt with open('test.txt') as ...

  2. 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)

    引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...

  3. matlab计算矩阵每列非0元素个数

    在统计分析中,有时候需要计算矩阵每列非0元素的个数,可以用以下方法: 先用find找到每列不为0的元素index,然后用count计数. 假设有矩阵A[M,N], 结果存在countZeros cou ...

  4. 给定一个公式字符串用java进行拆解并计算结果

    需求很简单,给定一个字符串形式的公式规则,用java代码进行拆解,并能计算出结果. ♦考虑字符串中数字格式[整数.小数点] ♦考虑字符串中运算符[+-*/()] ♦考虑空格.运算规则[被0除] 以下是 ...

  5. 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length

    // 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba ...

  6. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  7. js字符串长度计算(一个汉字==两个字符)和字符串截取

    js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\ ...

  8. 给定一个字符串,仅由a,b,c 3种小写字母组成。

    package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ...

  9. 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。

    题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...

  10. 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

随机推荐

  1. 【MSSQL】远程打开对象

    opendatasource https://docs.microsoft.com/zh-cn/sql/t-sql/functions/opendatasource-transact-sql?view ...

  2. VSCode 快捷键,简化操作

    一. 区域代码快捷键 1. 折叠所有 折叠所有区域代码的快捷: ctrl + k      ctrl + 0 ; 展开所有折叠区域代码的快捷:ctrl +k      ctrl + J ; 2. 按层 ...

  3. Web For Pentester - SQL injections/Directory traversal

    SQL injections Example 1 典型的SQL注入 name=root' or 1=1 %23 直接执行就可以导出所有用户 查看后端的源码 观察到,我们传入入的name中,传入就成为了 ...

  4. JavaWeb相关学习环境的配置(一)

    JavaWeb相关学习环境的配置(一) 之 JDK的配置 步骤: 1.去官网找到自己想要下载的版本: 官网地址:https://www.oracle.com/java/technologies/dow ...

  5. 声网 X 远程超声:实时音视频解决基层“看病难” 推动医疗资源均衡化

    实时互联网像触角一样,通过情景的共享延伸开来,链接着我们彼此的线下.线上生活,形成一张不可分割的网络.随着社交直播.在线教育.视频会议成为大众生活不可或缺的一部分的同时,智能手表.智能作业灯.视频双录 ...

  6. 【读书笔记】排列研究-模式避免-基础Pattern Avoidance

    目录 模式避免的定义 避免Pattern q 的n-排列计数\(S_n(q)\) q长度是2 q长度是3 对一些模式q,做\(S_n(q)\)的阶估计 Backelin, West, and Xin给 ...

  7. dart基础---->dart语法入门

    Dart is an open source, structured programming language for creating complex, browser-based web appl ...

  8. Docker部署nginx+vue项目并运行

    一.打包VUE项目 npm run build:prod 二.编写default.conf 文件 server { listen 80; server_name localhost; #charset ...

  9. THM-被动侦察和主动侦查

    被动与主动侦察 在计算机系统和网络出现之前,孙子兵法在孙子兵法中教导说:"知己知彼,必胜不疑." 如果您扮演攻击者的角色,则需要收集有关目标系统的信息.如果你扮演防御者的角色,你需 ...

  10. 「刷起来」Go必看的进阶面试题详解

    勤学如春起之苗,不见其增日有所长:辍学如磨刀之石,不见其损日有所亏. 本文的重点:逃逸分析.延迟语句.散列表.通道.接口. 1.逃逸分析 逃逸分析是Go语言中的一项重要优化技术,可以帮助程序减少内存分 ...