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

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

时间:2024-06-14 20:33:46浏览次数: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"

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

        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://www.cnblogs.com/AmyMoJianJun/p/18248573

相关文章

  • LeetCode刷题之HOT100之二叉树的遍历
    2024/6/14这几天总是下雨,天气预报上面显示这个月都要持续下雨,下雨天了怎么办?我好想你,不敢打给你,我找不到原因。说着说着唱起来了哈哈!Anyway,昨天晚上打开了《涅朵奇卡一个女人的一生》,这本篇幅不长的小说我很久前就想看,还是从王小波那里知道的这本书,才开始看陀思妥耶夫斯基,......
  • 代码随想录 算法训练营 day9 Leetcode151 反转字符串单词 karma55 右旋转字符串 28 实
    Leetcode151反转字符串单词题目链接讲解此题方法很多很重要注重基础解法classSolution{publicStringreverseWords(Strings){char[]initialArr=s.toCharArray();//新字符数组char[]newArr=newchar[initialArr.length+1];//下......
  • 【Java】 将字节数组转换为十六进制字符串:Java实现指南
    >>【痕迹】QQ+微信朋友圈和聊天记录分析工具>>(1)纯Python语言实现,使用Flask后端,本地分析,不上传个人数据。>>(2)内含QQ、微信聊天记录保存到本地的方法,真正实现自己数据自己管理。>>(3)数据可视化分析QQ、微信聊天记录,提取某一天的聊天记录与大模型对话。>>下载地......
  • LeetCode:经典题之88 题解与延伸
    系列目录88.合并两个有序数组目录系列目录88.合并两个有序数组C++C语言88.合并两个有序数组......
  • Q32 LeetCode15 三数之和
    难点在于不能重复1.将数组进行排序2.找到合适组合后将三个指针都要进行向后去重操作  1classSolution{2publicList<List<Integer>>threeSum(int[]nums){3Arrays.sort(nums);4List<List<Integer>>ans=newArrayList<>();5......
  • Q31 LeetCode438 找到字符串中所有字母异位词
    没看懂 1classSolution{2publicList<Integer>findAnagrams(Strings,Stringp){3List<Integer>res=newArrayList<>();4int[]cnt=newint[26];5intn=p.length();6intm=s.length();7......
  • Q30 LeetCode454 四数相加2
    相对于4重循环,改成两个二重循环O(n2)使用HashMap存储前两个数组的和,再在另外两个数组的循环中找值  1classSolution{2publicintfourSumCount(int[]nums1,int[]nums2,int[]nums3,int[]nums4){3intans=0;4intsum=0;5......
  • Q28 LeetCode202 快乐数
    主要是查看HashMap中是否存储n,如果存储就说明非快乐数各位的数平方相加的方法 1classSolution{2publicbooleanisHappy(intn){3HashMap<Integer,Integer>map=newHashMap<>();45while(getSum(n)!=1){6intan......
  • 字符数组与字符串
    一、字符数组1.字符数组初始化类型数组名[长度]={元素1,元素2...};类型数组名[长度]=“abcde”;chara[5]={'a','b','c','d','e'};charb[5]="abcde";//错误:末尾还需要存放\0for(inti=0;i<5;i++)cout<<a[i];2.字符数组的输入输出使用cin,cout......
  • 【堆】Leetcode 373. 查找和最小的 K 对数字【中等】
    查找和最小的K对数字给定两个以非递减顺序排列的整数数组nums1和nums2,以及一个整数k。定义一对值(u,v),其中第一个元素来自nums1,第二个元素来自nums2。请找到和最小的k个数对(u1,v1),(u2,v2)…(uk,vk)。示例1:输入:nums1=[1,7,11],nums......