我的力扣算法763-划分字母区间

       不好意思,虽然嘴上说着要努力,却没有经常来博客里多发文章,
       我也知道自己是个菜鸟,但是也知道不努力,就一直是菜鸟,所以
       我现在又回来了,我会尽力每天更新一篇博客,内容不定,有没有
       人看没关系,就算是对自己负责吧。

今天就先来做一道今天力扣上的每日一题吧,力扣我也做的不多,但是确实是一个很不错的网站,里面包括了很多算法题,其中也不乏有部分公司的面试题,很适合我们这些小白拿着练练手。我做力扣也不多,每天把每日一题做了就当时完成任务了,因为还在上学嘛,还有很多东西学习,每天时间安排得也比较充分了,玩肯定是要玩的,但是学习的事情,咱从不马虎。

先看看今天的题吧:
763
本次的题目是一道中等题,说简单吧,你看题肯定看得懂,说难吧,你看懂了题,其实也不一定自己写得出来,这没说吧,我就是属于看懂了,知道这道题什么意思,但是我就是说不出来,说来也忏愧,也好意思说自己是软件工程的人,害,丢人咯。
算了,先不整那些虚的,为了防止还有些同志题目也没怎么看懂的,我就来先说说题目。
他的意思是,让我们输入一段字符串,然后呢,把字符串分成几个部分,然后输出一个数组,数组里存放的是分出的每个部分的长度。
其实吧,就是找到那个表示一个部分最后一个数的下标,然后通过运算来求出长度,这个应该算石比较简单的。

难的地方其实是关于怎么把字符串分开成几分,分开的规则是啥,还有具体怎么实现。

首先我们先看题:
在这里插入图片描述
在这里,我们可以知道,这一长串字符串,如果里面有出现次数超过1次以上的字符,那么这几个字符都必须分在一个部分里面。
这时,我们会想到,把这个数组遍历,然后找一段子字符串,直到后面的字符串里没有字符串里面任意一个字符式,这个时候就是一部分的字符串。这样子也同样保证了尽可能多的片段。
在这里插入图片描述
这里,我分享一个评论区大佬的思路,通过map<char,int>函数存放不同的字符,比如说,输入"ababcbacadefegdehijhklij",然后,先进行遍历,先遇到a,把a放进map中,value值为当前遍历的下标,也就是0,然后是b,value值为1,接下来又是a,因为map函数的特性,相同的key会覆盖掉之前的key,那么a的value值变成了2。然后重复这个过程。

在这里插入图片描述
这里要说的,就是通过一次的for循环,就可以在map中找到一个片段。我们只需要再进行一次循环,就可以通过计算,得到这个片段的长度,下面是代码:

vector<int> partitionLabels(string S) {
    vector<int> n;
    unordered_map<char, int> map; //记录char c 和其最后出现位置的 map
    int start = 0, end = 0;
    for (int i = 0; i < S.size(); i ++) {
        map[S[i]] = i;
    }//这里进行第二次遍历,目的就是直到每个片段的最后一个字符的下标的位置,然后通过计算,获得长度。
    for (int i = 0; i < S.size(); i ++) {
        end = max(end, map[S[i]]);
        //如果当前的下标表示的字符是某段的最后一个字符,则一个片段结束。
        if (i == end) {
            n.push_back(end - start + 1);
            start = i + 1;//从上一个片段后面开始计算
        }
    }
    return n;
}

ok,本次的力扣每日一题就这样完成了,我承认,我不会,我看了好久都没有想到一种比较高效的算法,最后实在不行,打开了评论,发现了大佬,如果你也是这样,那没事,我们就是因为不优秀才进行学习,懂的人谁还在这儿呢,是吧。加了个油,下次见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值