求解ab串

【问题描述】

给定一个由字符'a'和字符'b'组成的字符串,可以删除若干字符,使得剩下来的字符串满足前后段为a,中间段为b(aaa....aaabbbb.....bbbbaaa.....aaa),区段可以没有字符(ba,ab,b,aa都是合法的),求最长剩下字符串的长度。

【输入形式】

输入为一行一个长度不超过5000的非空字符串,字符串仅由字符'a'和字符'b'组成。

【输出形式】

输出为一个整数,表示符合要求的最长剩下字符串长度

【样例输入1】

abba

【样例输出1】

4

【样例输入2】

bab

【样例输出2】

2

解题思路

解题方法:前缀和+双重循环遍历

题目理解: 题目要求删除一些字符,使得剩余的字符串形式为前面全是'a',中间全是'b',后面全是'a'的形式,且要求剩余字符串尽可能长。

使用前缀和数组:前缀和数组cnt用于快速计算任意区间内'a'的数量。cnt[i]表示原字符串中从头开始到位置i(不包括i)有多少个'a'。 cnt[i] = cnt[i-1] + (s.charAt(i-1) == 'a' ? 1 : 0);

计算最长字符数:对于任意的分割点iji <= j),可以将字符串分为三部分:

  • 第一部分:[0, i),这部分应全为'a',即cnt[i]

  • 第二部分:[i, j],这部分应全为'b',即j-i-(cnt[j] - cnt[i])

  • 第三部分:(j, len],这部分应全为'a',,即cnt[len] - cnt[j]

找到最长字符数: 通过双重循环遍历所有可能的ij的组合,计算出所有情况下的最长字符数,取最大值maxLength。

输出maxLength。

Java代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s = scanner.next();int len = s.length();int[] cnt = new int[len+1];for (int i = 1; i <= len; i++) {cnt[i] = cnt[i-1] + (s.charAt(i-1) == 'a' ? 1 : 0);}int maxLength = Integer.MIN_VALUE;for (int i = 0; i <= len; i++) {for (int j = i; j <= len; j++) {int Length = cnt[i] + (j-i-(cnt[j] - cnt[i])) + (cnt[len] - cnt[j]);maxLength = Math.max(Length, maxLength);}}System.out.println(maxLength);scanner.close();}
}

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

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

相关文章

Scikit是什么?

目录 一、Scikit是什么&#xff1f; 二、用Scikit做一个简单房价预测例子 三、sklearn知识点 一、Scikit是什么&#xff1f; Scikit就是scikit-learn&#xff0c;是一个免费软件机器学习库。 https://scikit-learn.org/stable/https://scikit-learn.org/stable/ 用于预测数…

SoundStream: 下一代的神经网络音频编解码器,实时压缩不牺牲音质

音频编解码技术的目标是&#xff0c;通过减少音频文件的大小来节省存储空间或减轻网络传输的负担。理想的情况下&#xff0c;即使音频被压缩&#xff0c;我们听到的声音与原版也应该没有任何区别。 过去&#xff0c;已经有不少编解码技术被开发出来&#xff0c;满足了这些需求…

[重学Python] Day8 面向对象编程:详解基于接口编程、组合优于继承、控制反转及SOLID五个原则

[重学Python] Day8 面向对象编程&#xff1a;详解基于接口编程、组合优于继承、控制反转及SOLID五个原则 一、面向对象编程的理念1、基于接口编程面向对象中基于接口编程主要有以下一些优点和特点 2、组合优于继承组合优于继承的优点和特点主要包括以下几点 3、控制反转通过控制…

Day13-JavaWeb开发-事务管理(回顾/进阶)AOP基础(入门/概念)AOP进阶(通知类型/顺序/切点表达式)AOP案例

1. 事务管理 1.1 事务管理-事务回顾 1.2 事务管理-事务进阶 rollbackFor propagetion 2. AOP基础 2.1 AOP基础-快速入门 2.2 AOP基础-核心概念 3. AOP进阶 3.1 AOP进阶-通知类型 3.2 AOP进阶-通知顺序 3.3 切入点表达式-execution 3.4 切入点表达式-annottation 3.5 AOP进阶…

Flutter路由跳转的两种方式

1.基本路由跳转&#xff1a;文件引入在你要跳转的页面引入 ElevatedButton(onPressed: () {Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const NewsPage(arguments: {"title": "基本路由新闻页面传值","a…

Linux中对文件的操作(二)

文件描述符 文件描述符fd是通过open打开某一文件后返回的非负整数。在Linux系统中默认存在的文件描述符有0——标准输入&#xff0c;1——标准输出&#xff0c;2——标准错误 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include &…

如何构建用于从收据中提取信息的生成式人工智能工具

原文地址&#xff1a;how-to-build-a-generative-ai-tool-for-information-extraction-from-receipts 使用 LangChain 和 OpenAI 工具从 Google Drive 中存储的收据图像中提取结构化信息 2024 年 4 月 10 日 纸质收据有各种样式和格式&#xff0c;是自动信息提取的一个有趣目…

Web服务器手动配置

目录 配置环境 http配置 配置步骤 1、首先安装Nginx&#xff08;已经安装的跳过这步&#xff09; 2、查看一下下Nginx的配置文件结构&#xff0c;了解如何配置&#xff0c;以及配置的各个条目有什么作用&#xff08;为接下来的配置打基础&#xff09; 3、创建你的网页 4、…

leetCode79. 单词搜索

leetCode79. 单词搜索 思路&#xff1a;就是在各个位置四个方向的暴力搜索&#xff08;dfs&#xff09;&#xff0c;直到找到word一摸一样的方案为止 代码 /* 此题就是一个从每一个方向向四周暴力搜索的题目 */ class Solution { public:bool exist(vector<vector<char&…

【JAVA项目】基于ssm的协同过滤算法的【图书推荐系统】

技术简介&#xff1a;采用B/S架构、ssm 框架、Java技术、MySQL等技术实现。 系统简介&#xff1a;系统权限按管理员和用户这两类涉及用户划分。&#xff08;1&#xff09;管理员功能需求 管理员登陆后&#xff0c;主要包括首页、个人中心、用户管理、书籍管理、书籍分类管理、热…

牛客NC382 切割木头【中等 二分超找 Java/Go/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/707d98cee255448c838c76918a702be0 核心 二分查找Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可…

midjourney简单使用体验

自从我下了controlNet近20G的模型以后&#xff0c;我发现我本地的sd实在跑不动了。 为了能更好的试验一下作图&#xff0c;我只能转战mj。 mj相对于我们来说还算挺友好的&#xff0c;有个梯子就行&#xff0c;虽然需要付费&#xff0c;但是。。多的我也不多说了&#xff0c;懂…

vue如何如何组合组件并通讯

在Vue中&#xff0c;组件的组合和通讯是构建复杂应用的关键部分。Vue提供了多种方式来组合组件&#xff0c;并允许组件之间进行通讯。以下是一些常见的方法&#xff1a; 1. 父子组件通讯 父组件向子组件传递数据&#xff1a; 通过props属性向子组件传递数据。 vue <!--…

安卓 app icon大小 安卓app界面尺寸大小

移动应用的界面设计画布尺寸设计多大&#xff08;特别是Android&#xff09;、图标和字体大小怎么定、需要设计多套设计稿么、如何切图以配合开发的实现&#xff1f; 本篇将结合iOS和android官方的设计规范、搜集的资料以及工作中的摸索&#xff0c;来分享移动应用界面设计中的…

Delta lake with Java--读《Delta Lake Up and Running》总结

利用5.1假期读完《Delta Lake Up and Running》&#xff0c;这本书非常适合入门&#xff0c;但不够深入&#xff0c;要想将Delta lake用于实际项目&#xff0c;还是需要从spark开始重新学习。学完一本书总结一下这本书的内容。 第一章 概念介绍&#xff0c;其中第21页的Medall…

gcc编译器分析

gcc编译器分析 参考词法分析语法分析预读一个符号语法分析函数调用关系重点函数分析c_parse_filec_parser_translation_unit 参考 《gcc源码分析》 词法分析 词法分析的过程就是将源代码识别成一个一个的词法符号&#xff0c;并在词法分析的过程中创建一些树节点&#xff0c…

tomcat+nginx 动静分离

一、单机反向代理 7-1 7-2 测试 二、多机反向代理 1. 环境准备 机器IP地址服务7-1172.168.1.11nginx7-2172.168.1.12tomcat7-3172.168.1.13tomcat 2. 配置7-1 Nginx 服务器 vim /apps/nginx/conf/nginx.confhttp:upstream tomcat {server 172.168.1.12:8080;server …

⑩ - 移动端工程师通识指南

📖 该文隶属 程序员:职场关键角色通识宝典✍️ 作者:哈哥撩编程(视频号同名) 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者🏆 推荐专栏: 🏅 程序员:职场关键角色通识宝典🏅

探索设计模式的魅力:分布式模式让业务更高效、更安全、更稳定

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索分布式模式之旅✨ 在数字化时代&#xff0c;企业面临着前所未有的挑战和机遇。…

STM32开发笔记-新建标准库工程

1.STM32开发方式 STM32开发一般包括三种方式&#xff1a;基于寄存器开发、基于标准外设库开发、基于HAL库开发。 标准外设库是最基础的STM32开发方式&#xff0c;提供了一系列函数用于配置和控制STM32的外设&#xff0c;如GPIO、USART、SPI等。使用标准外设库需要手动编写代码…