首页 > 其他分享 >[LeetCode笔记]942. 增减字符串匹配

[LeetCode笔记]942. 增减字符串匹配

时间:2024-08-24 16:22:49浏览次数:12  
标签:排列 示例 int 942 perm vector 字符串 LeetCode

/*942. 增减字符串匹配

由范围 [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,则返回其中 任何一个 。

示例 1:

输入:s = "IDID"

输出:[0,4,1,3,2]

示例 2:

输入:s = "III"

输出:[0,1,2,3]

示例 3:

输入:s = "DDI"

输出:[3,2,0,1]

提示:

1 <= s.length <= 105

s 只包含字符 "I" 或 "D"*/

关键点在于可先用输出的数字排列根据规则计算处字符串,再去理解将字符串转换为相应排列的关系.本体关键在于用字符表示出数字的增减关系.相当于解码点题.倒着算,先算出I的数量作为最后一个元素的值,再从后往前计算I和D的数量分别赋值.

class Solution {
public:
    vector<int> diStringMatch(string s) {
        //关键点在于可先用输出的数字排列根据规则计算处字符串,再去理解将字符串转换为相应排列的关系.本体关键在于用字符表示出数字的增减关系.相当于解码点题.
        //倒着算,先算出I的数量作为最后一个元素的值,再从后往前计算I和D的数量分别赋值.
 
        vector<int> Is;
        vector<int> Ds;
 

        int n=s.size();
        vector<int> DIs(n);
        int count=0;
        for(int i=0;i<s.size();i++){
            if(s[i] == 'I')
            count++;
        }
      
        int count_i=count;
        int count_d=count;
          for(int i=0;i<s.size();i++){
            if(s[n-i-1] == 'I'){
                count_i--;
                DIs[n-i-1]=count_i;
            }
            else{
                count_d++;
                DIs[n-i-1]=count_d;
            }
             }
            DIs.push_back(count);
        return DIs;

    }
};

标签:排列,示例,int,942,perm,vector,字符串,LeetCode
From: https://blog.csdn.net/Mo_Jianjun/article/details/141501171

相关文章

  • [LeetCode]999. 可以被一步捕获的棋子数
    可以被一步捕获的棋子数简单给定一个8x8的棋盘,只有一个白色的车,用字符'R'表示。棋盘上还可能存在白色的象'B'以及黑色的卒'p'。空方块用字符'.'表示。车可以按水平或竖直方向(上,下,左,右)移动任意个方格直到它遇到另一个棋子或棋盘的边界。如果它能够在一次移动中移......
  • LeetCode之链表类题目
    链表类题目之CPP版......
  • LeetCode-Python-1650. 二叉树的最近公共祖先 III
    给定一棵二叉树中的两个节点 p 和 q,返回它们的最近公共祖先节点(LCA)。每个节点都包含其父节点的引用(指针)。Node 的定义如下:classNode{publicintval;publicNodeleft;publicNoderight;publicNodeparent;}根据维基百科中对最近公共祖先节点......
  • 【LeetCode面试150】——36有效的数独
    博客昵称:沈小农学编程作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!......
  • 【LeetCode面试150】——3无重复数组的最长子串
    博客昵称:沈小农学编程作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!......
  • 字符串包含了不需要的双引号,导致读取成json文件失败?Python怎么批量修改?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python数据处理的问题。问题如下:大佬们请教下这个问题,数据为下载的html文件,写法已经固定,解析成json文件会报错,这种字符串包含了不需要的双引号,导致读取成json文件失败?怎么批量修改?用......
  • Java工具类之字符串类(超详细)
    1、 字符串类字符串是我们在编程中最常使用的一种数据类型,Java中用类来描述字符串,其中最常用的字符串处理类是String,此外还有StringBuffer和StringBuilder。在本节,我们会了解每种字符串处理类的特点,以便能在应用时选择合适的字符串类型。字符串不属于8种基本数据类型,而是一种......
  • LeetCode84(柱状图中最大的矩形)理解单调栈
    1.LeetCode84(柱状图中最大的矩形)给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例1:输入:heights=[2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为10示例2:输入......
  • 【C】第5天 认识一揽子字符串函数
    字符串函数StringFunctionC语言自带的头文件string.h中包含了一些常用字符串函数原型,合理利用它们将有助于弥补C在字符串处理方面的不足。STR-FUNC-1检查字符串长度的strlen()库函数strlen()的函数原型:size_tstrlen(charconst*string)它接受一个指向字符串起始......
  • 代码随想录算法训练营第 51 天 |LeetCode99岛屿数量 LeetCode100.岛屿的最大面积
    代码随想录算法训练营Day51代码随想录算法训练营第51天|LeetCode99岛屿数量LeetCode100.岛屿的最大面积目录代码随想录算法训练营前言LeetCode200岛屿数量LCR105.岛屿的最大面积一、广度优先搜索基础1、用队列实现2、代码框架:二、卡码网99岛屿数量(LeetCode......