牛客算法心得——abb(dp)

大家好,我是晴天学长,传智杯的题,我准备写一个题解,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪


1) .abb

在这里插入图片描述
leafee 最近爱上了 abb 型语句,比如“叠词词”、“恶心心”
leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列?
定义: abb 型字符串满足以下条件:

字符串长度为 3 。
字符串后两位相同。
字符串前两位不同。

输入描述:
第一行一个正整数 n
第二行一个长度为 n 的字符串(只包含小写字母)

输出描述:
"abb" 型的子序列个数。
示例1
输入:
6
abcbcc
输出:
8
说明:
共有1个abb,3个acc,4个bcc

示例2
输入:
4
abbb
输出:
3


2) .算法思路

abb(反面动规)
1.用一个一维数组维护就行。
2.从后面遍历
3. 与其他字母组合,不包括自己

ans = t(t-1) / 2 ;


3)算法步骤

1.使用一个int数组word记录每个字母在字符串s中出现的次数。

2.从字符串s的尾部开始遍历,得到每个字母,计算下标,将对应word数组位置+1。

3.对每个字母统计后,再次遍历word数组。

4.对每个字母i,遍历其他字母j。

5.如果j位置的word值大于等于2,计算它的组合数word[j]*(word[j]-1)/2 ,即该字母出现次数的选择2个的组合数。

6.将所有字母j的组合数加到总和sum中。

7.最终sum就是字符串s中每个字母出现次数的组合数之和。


4). 代码实例

import java.io.*;public class Main {static int[] word = new int[26];static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static String[] lines;public static void main(String[] args) throws IOException {lines = in.readLine().split(" ");int n = Integer.parseInt(lines[0]);lines = in.readLine().split(" ");String s = lines[0];int length = s.length();long sum = 0;for (int i = length - 1; i >= 0; i--) {char temp = s.charAt(i);int index = temp - 'a';for (int j = 0; j < 26; j++) {if (j != index && word[j] >= 2) {sum += (long) word[j] *(word[j]-1)/2;}}word[index]++;}System.out.println(sum);}
}

4).总结

  • 找到以前状态,记录当前状态。

题解:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/233786.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索Maven:优雅构建Java项目的新方式(二)

Meven高级 1&#xff0c;属性1.1 属性1.1.1 问题分析1.1.2 解决步骤步骤1:父工程中定义属性步骤2:修改依赖的version 1.2 配置文件加载属性步骤1:父工程定义属性步骤2:jdbc.properties文件中引用属性步骤3:设置maven过滤文件范围步骤4:测试是否生效 1.3 版本管理 2&#xff0c;…

Xpath定位文本中含有空格的元素

可以使用XPath中的normalize-space函数来定位文本中含有空格的元素。主要包含normalize-space(.)、normalize-space(text())两种用法&#xff1a; 使用 normalize-space(.) 的例子&#xff1a; <root><element>Hello, world!</element> </root>在上述…

从实践角度深入探究数据驱动和关键字驱动测试方法!

数据驱动 数据驱动&#xff0c;指在软件测试领域当中的数据驱动测试&#xff08;Data-Driven Testing&#xff0c;简称DDT&#xff09;是⼀种软件测试⽅法&#xff0c;在不同的数据下重复执⾏相同顺序的测试步骤&#xff0c;测试脚本从数据源读取测试数据&#xff0c;⽽不使⽤…

轻型载重汽车转向前桥总成系统毕业设计机械设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;前桥 获取完整说明报告工程源文件 绪论 1.1 轻型载重汽车转向桥的设计意义 汽车是现代交通工具中用得最多&#xff0c;最普遍&#xff0c;也是最方便的交通运输工具。汽车转向系是汽车上的一个重要系统,它是汽车转向运动…

「Python编程基础」第5章:列表

文章目录 一、为什么要有列表&#xff1f;二、列表语法三、用索引获取列表中的单个值四、利用切片取得子列表五、利用len()函数&#xff0c;获取列表的长度六、利用索引改变列表中的值七、列表的连接和复制八、用del语句删除列表中的值九、有了列表后&#xff0c;真香十、列表的…

Jenkins持续集成Python项目

一、前言   之前学习了很多自动化测试框架&#xff0c;但是写的脚本都是本地执行&#xff0c;多数用来造数据。最近公司掀起一股自动化测试的风&#xff0c;所以就想研究下如何集成jenkins&#xff0c;本次采用pytest&#xff0c;用的是阿里云服务器centos7。 二、服务器环境…

LVS+Keepalived实验

实验前准备 主DR服务器&#xff1a;(ens33)192.168.188.11 ipvsadm、keepalived (ens33:0)192.168.188.188 备DR服务器&#xff1a;(ens33)192.168.188.12 ipvsadm、keepalived (ens33:0)192.168.188.188 Wbe服务器1&#xff1a;(ens33)192.168.188.13 (lo:0)192.168.188.188 W…

HarmonyOS4.0开发应用(二)【快速学习】

快速学习 创建项目 1.开始创建 2.选择模板 刚开始选择空白的模板即可 3.填写项目信息 这样一个基本项目就创建好了 代码结构 实现Demo(文字动态切换) Entry Component struct Index {State message: string Hello Worldbuild() {Row() {Column() {Text(this.message).fo…

JavaScript WebApi 一(详讲)

基础知识在前面的部分已经讲过了&#xff0c;大家如果没有学习过JavaScript的可以去看一下 1.DOM 引入 在JavaScript中&#xff0c;DOM&#xff08;文档对象模型&#xff09;提供了一种表示和操作HTML文档的方式。在DOM中&#xff0c;文档被表示为一个由节点组成的树形结构。…

6.如何利用LIO-SAM生成可用于机器人/无人机导航的二维/三维栅格地图--以octomap为例

目录 1 octomap的安装 2 二维导航节点的建立及栅格地图的构建 3 三维栅格地图的建立 1 octomap的安装 这里采用命令安装&#xff1a; sudo apt install ros-melodic-octomap-msgs ros-melodic-octomap-ros ros-melodic-octomap-rviz-plugins ros-melodic-octomap-server 这样…

Linux 命令ln

1什么是链接 ln在Linux中 ln 命令的功能是为某一个文件在另外一个位置建立一个同步的链接&#xff0c;当我们需要在不同的目录&#xff0c;用到相同的文件时&#xff0c;我们不需要在每一个需要的目录下都放一个必须相同的文件&#xff0c;我们只要在某个固定的目录&#xff0…