当前位置: 首页 > ai >正文

求数组中最长单调不降连续子数组的长度

1、题目描述

多多君正在研究字符串数组的单调性。他定义一个字符串数组为单调不降当且仅当对所有相邻元素s[i] 和s[i+1],都有s[i]≤s[i+1],其中≤表示:
1.首先按照字符串的长度比较,长度更长的字符串更大,如 banana > apple
2.在长度相等的情况下,按字符串的字典序比较,字典序较大的字符串更大,如 chery > banana

给定苦干组测试数据,每组数据包含一个字符串数组。你需要计算该数组中最长的单调不降连续子数组的长度。


输入描述:

第一行为一个整数T(1<=T<=1000),表示测试用例的数量。
接下俩的2T行,每两行表示一组测试用例:
第一行为当前测试用例输入的字符串数组的长度n(1<=n<=1000)
第二行为n个由空格分隔的字符串,对应字符串数组中的每个元素;其中每个字符串仅包含小写字母,长度不超过20.

输出描述:

输出包含T行
每一行为对应测试用例中,最长的单调不降连续子数组的长度


补充说明:
20%数据满足n<=100
50%数据满足n<=500
100%数据满足n<=1000
长度为1的字符串数组也可以单调不降


实例1

输入:

2
3
apple banana cherry
4
dog cat bird elephant

输出:

3
3


说明:
第一组数据中,apple<banana<cherry,所以结果为3
第二组数据中,dog>cat, cat<bird,bird<elephant,所以结果为3

2、解题思路

要解决这个问题,我们需要找到字符串数组中最长的单调不降连续子数组的长度。单调不降的定义是:对于所有相邻的字符串,前一个字符串的长度小于或等于后一个字符串的长度,如果长度相等,则前一个字符串的字典序小于或等于后一个字符串的字典序。

方法思路

  1. 输入处理:首先读取测试用例的数量T,然后逐个处理每个测试用例。对于每个测试用例,读取字符串数组的长度n和字符串数组本身。

  2. 单调性检查:对于每个字符串数组,我们需要检查每个相邻字符串是否满足单调不降的条件。具体来说,对于相邻的字符串s[i]和s[i+1],需要满足s[i]的长度小于s[i+1]的长度,或者长度相等时s[i]的字典序小于等于s[i+1]的字典序。

  3. 最长子数组计算:使用动态规划的方法来记录以每个位置结尾的最长单调不降子数组的长度。初始化时,每个位置的最长子数组长度为1。然后,对于每个位置i,检查其与前一个位置i-1是否满足单调不降的条件。如果满足,则当前最长子数组长度为前一个位置的最长子数组长度加1;否则,重置为1。最终,最大的长度即为答案。

代码实现

    public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int T = scanner.nextInt();scanner.nextLine(); for (int t = 0; t < T; t++) {int n = scanner.nextInt();scanner.nextLine(); String[] strs = scanner.nextLine().split(" ");if (n == 0) {System.out.println(0);continue;}int maxLen = 1;int currentLen = 1;for (int i = 1; i < n; i++) {String prev = strs[i - 1];String curr = strs[i];if (compare(prev, curr) <= 0) {currentLen++;maxLen = Math.max(maxLen, currentLen);} else {currentLen = 1;}}System.out.println(maxLen);}scanner.close();}

代码解释

  1. 输入处理:使用Scanner读取输入的测试用例数量T,然后逐个处理每个测试用例。对于每个测试用例,读取字符串数组的长度n和字符串数组本身。

  2. 单调性检查compare方法用于比较两个字符串的大小。首先比较字符串的长度,如果长度不同,返回长度的比较结果;如果长度相同,返回字典序的比较结果。

  3. 最长子数组计算:初始化maxLencurrentLen为1。遍历字符串数组,对于每个位置i,比较strs[i-1]strs[i]。如果满足单调不降的条件,增加currentLen并更新maxLen;否则,重置currentLen为1。最终,maxLen即为最长的单调不降连续子数组的长度。

http://www.xdnf.cn/news/14330.html

相关文章:

  • stm32 f103c8t6仿真 串口收发测试
  • 用AI配合MCP快速生成n8n工作流
  • 【Linux服务器】-安装zabbix-负载环境(故障自动切换场景)
  • HarmonyOS Grid 网格拖拽完全指南
  • 设备健康管理系统搭建全技术解析:从架构设计到智能运维实践
  • Linux 忘记root密码如何解决-linux025
  • 理解 package.json 中的版本控制:“nuxt“: “3.16.0“ vs “nuxt“: “^3.16.0“ 的深层差异
  • DependencyMatcher + ML Reranking 策略设计实践
  • Qt3d中的材质--PBR材质
  • vue中computed和watch区别
  • jxWebUI--简单易用的webUI库
  • 大模型微调(Fine-tuning)概览
  • 算法导论第七章:快速排序的艺术与科学
  • 使用axios及和spirng boot 交互
  • @SpringBootTest 详解
  • Day32
  • 《Vuejs设计与实现》第 9 章(简单 diff 算法)
  • NISP-PTE基础实操——SQL注入
  • [蓝桥杯 2025 国 B] 斐波那契字符串一一题解
  • 论文笔记 <交通灯> <多智能体>DERLight双重经验回放灯机制
  • HTML5+JS实现一个简单的SVG 贝塞尔曲线可视化设计器,通过几个点移动位置,控制曲线的方向
  • 路由器端口映射怎么设置?本地固定内网IP给外面网络连接访问
  • [深度学习]目标检测YOLO v3
  • AI视野:视频处理AI排行榜Top10 | 2025年05月
  • 解决电脑第一排按键功能失效的问题
  • 多维数据透视分析应用案例与深度解析
  • Micro-F1分数(多选)
  • 基于Python爬虫的房价可视化
  • android为什么不用sqlite数据库,而要用Realm
  • Python使用requests调用接口