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

942. 增减字符串匹配 - 力扣

1. 题目

由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:

  • 如果 perm[i] < perm[i + 1] ,那么 s[i] == 'I' 
  • 如果 perm[i] > perm[i + 1] ,那么 s[i] == 'D' 

给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。

2. 示例

3. 分析

这道题目的意思就是如果字符是 I ,则当前元素需小于后一个元素;若为 D ,则当前元素需大于后一个元素:

以下摘抄自 官方题解 :

考虑 perm[0] (返回数组) 的值,根据题意:

  • 如果 s[0] = 'I',那么令 perm[0] = 0,则无论 perm[1] 为何值都满足 perm[0] < perm[1];
  • 如果 s[0] = 'D',那么令 perm[0] = n,则无论 perm[1] 为何值都满足 perm[0] > perm[1];

确定好 perm[0] 后,剩余的 n−1 个字符和 n 个待确定的数就变成了一个和原问题相同,但规模为 n−1 的问题。因此我们可以继续按照上述方法确定 perm[1]:如果 s[1] = 'I',那么令 perm[1] 为剩余数字中的最小数;如果 s[1] = 'D',那么令 perm[1] 为剩余数字中的最大数。如此循环直至剩下一个数,填入 perm[n] 中。即 I 就放剩余数字中的最小数,D 就放剩余数字中的最大数。

我们可以定义两个指针,表示剩余待确定数字中的最小和最大值:

class Solution {
public:vector<int> diStringMatch(string s) {int n = s.size();vector<int> res(n+1);int min = 0, max = n;for(int i = 0; i < n; i++){if(s[i] == 'I') {res[i] = min;min++;}               else {res[i] = max;max--;}}res[n] = max; // 还剩最后一个数,此时 min == maxreturn res;}
};
http://www.lryc.cn/news/361385.html

相关文章:

  • 2024华为OD机试真题-机器人搬砖-C++(C卷D卷)
  • 【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景
  • Mysql 技术实战篇
  • App自动化测试_Python+Appium使用手册
  • k8s-部署对象存储minio
  • go常用命令
  • 【中年危机】程序猿自救指南
  • vueRouter路由总结
  • 算法工程师需要学习C++的哪些知识?
  • CTF网络安全大赛简单的web抓包题目:HEADache
  • Qt Creator创建Python界面工程并打包为可执行exe文件
  • 基于单片机的步进电机控制系统的研究
  • BioPorto胰高血糖素样肽-1抗体(GLP-1)
  • Go 语言字符串及 strings 和 strconv 包
  • 政府窗口服务第三方评估报告如何写
  • 若依前后端分离Spring Security新增手机号登录
  • Oracle操作扩可变字符长度交易影响分析-较小
  • 全栈工程师需要具备哪些技能?
  • 用java实现客服聊天+网络爬虫下载音乐(java网络编程,io,多线程)
  • 基于springboot+vue的医院信息管理系统
  • 乡村振兴与农业科技创新:加大农业科技研发投入,推动农业科技创新,促进农业现代化和美丽乡村建设
  • Java 雪花算法:分布式唯一ID生成的魔法秘籍
  • mybatis配置环境流程
  • UE5增强输入系统入门
  • Python 语法好乱:深度解析与应对策略
  • 移动端框架:加速移动应用开发与提升跨平台兼容性
  • Linux systemctl:掌握软件启动和关闭的利器
  • Jmeter干货分享:当你的Log viewer不显示日志时,可能是引入的Jar包冲突导致
  • 网络编程TCP
  • C++中的迭代器