00:00
那接着的话呢,我们来看一下这个第三道题。CTRLC。嗯,这个DEMO1,嗯,那这呢,整个是考察我们这个算法题的那个,我这个分开吧。再来一个针的一个DEMO,这个这样写的。这个题目呢,是这样子的,说呢,获取一个字符串在另外一个字符串当中出现的次数,比如说呢,这个AB是一个字符串,它在这个字符串当中出现了多少次,那首先呢,我们把这个方法呢声明出来,需要的是一个次数,那我们就get一下这个嗯,它的次数,次数呢,我们叫这个count吧。嗯,这样写,那么现在呢,需要提供的参数都有哪些呢?是不是有两个字符串啊,那行首先呢,我们写一个string,这呢,我们写一个嗯字符串。
01:00
嗯,这是一个主字舞串了,这个我们写成叫may吧,Itr,然后后边这个呢,我写个string,这个呢叫一个sub atr,哎这样来处理,嗯,那这个方法的话呢,其实嗯主要的我们可以写一个这种这种方式了啊这个文档注示了,这里边这个MAY5串呢,是咱们所谓的这个叫主字五串啊,或者整个的介绍呢,相当于我们叫判断啊,或者叫获取,谁呢叫sub str,它呢在咱们的may str当中。这个出现的这个次数,它俩的地位是不一样的,如果我们要判断AB,这个没有空格,AB呢,在这里边出现几次,可能有好几次,但是你要反过来。所以这个呢,在这个里边出现的次数显然是零了,所以这里边大家写这两个字符串的话呢,它实际上是有这个地位的区别的,那那也就意味着什么呢?比如说啊,比如说谁呢,咱们这个may,这样我先这么找一下,咱们获取了这个may IR它的一个length。
02:09
那一个这个我们叫made,一个length。这是它,然后再一个叫sub的一个蓝色。好,那么我们这呢,可以做个判断啊,说这个made length呢,它得大于可以等于吧,如果是这种情况的话呢,我们还有的比如果呢,大家发现说这个made的这个L呢,它比这个sub l还短。那就没啥可比性了,直接return一个零肯定不可能的了,那么我们这里边主要考虑的就是这个逻辑了,为了保证它不报错,暂时呢,我先写个零啊好,那主要写的逻辑呢,应该在这儿行写这个逻辑,那这个逻辑呢,大家考虑我们怎么写,说他在这里边出现几次。
03:08
先拿这个的首字母。是否有相同的,嗯,就是你这个拿着A,然后去这里边呢,嗯,那你自己写个for循环是吗。写for循环,然后呢,这块呢,去找看看哪块出现过这个跟它一样的,嗯,那行,那如果说比如说这这块找到啊,比如说在这儿找到了,找到以后的话呢,接着你再拿这个的第二个和这个第二个比一下是吧?嗯,第二个呢,如果不一样,不一样怎么办呢。不一样,接着呢是从从从这个K区,应该是从这个去了,就因为我万一要有一个像这个,比如我要存在一个叫什么AAB的这种是吧,哎,你先出现个A跟这个A一样了,然后比第二个呢,这是A,这是B不一样了,不一样的时候呢,你就得接着往后找,往后找的时候你不能接着从B开始了,这就相当于丢了一个了,哎,你就接着呢,再拿这个,诶A跟我们这个,你刚才比完它以后的这个去比了就得。
04:20
那这样一说还挺细致的,那这样写法的话呢,那真的是不考虑任何string中的方法,就是相当于string那些方法呢,你也这块呢,也不用自己就是干写是吧,嗯,干写的话呢,确实行,具体针对这个问题的话呢,效率可能还可以,但是就怕什么呢,写的这个健壮性稍微差一点是吧。哎,所以呢,你可以有效的去用一下这个四分钟给你写好的方法啊,写的方法就让你用的,但就是方法用的时候呢,你有时候得考虑一下这个方法用,有的效率高,有的效率低啊,你可能需要关注一下这个底层了啊,是这个意思啊,咱们这块呢,也可以去用它的一些方法。
05:02
比如说词类当中有一些现成的方法,哪个可以方便我们去做这道题目啊,对,它有叫index of,它就帮我们去找里边有没有了啊,没有负一,有的话呢,不是负一,同时还告诉你在哪了,所以我们可以用一下它这个方法啊,那么比如说呢,我这AB,我直接呢调这个字符串的index so,它。假设找到了啊,假设找到了话呢,像咱们这个题目当中,一下子就找到了,这个时候返回的是不是零啊,角标零呗,那么返回角标零了不是负一,我们拿个变量记录一下,哎,让他呢加加一下,那么接下来怎么办?接下来是不是得往后考虑,那后指的是什么呢?是吧,刚才咱们是拿的整个这个字符串去引带so的,那你一定一旦找到一一个以后,你还得看看后边有没有,是不是再接着得从这个KK这块了,AB这块你已经找到了,所以把他们就得抠出来了,再从KK这块去找,那怎么去描述KK呢?就是你找到的返回的这个索引位置,再加上一下你这个字符串的长度呗,哎,就是后边这个位置。
06:24
啊,举个例子,比如说到后边这个这个AB哈,这个AB呢,我们返回的是这个A的一个index。嗯,那返回这index,如果它不是负一,那假设就是它了,然后找到了,我们接着再去考虑的话呢,就是这个index位置,再加上你这个前面字符串的它的一个长度,这个你别写死成二了啊,因为人家这个不一定是二了,找你这个sub.length嗯,这样的话呢,相当于就定位到这个位置了。啊,你再取咱们原有的这个字符串,是不是从这个位置的一个子串。把它呢,还看成咱们当前的字符串,哎,然后在在这个里边呢,去调index of看看还有没有。
07:07
对吧,哎,这样来去实现好写一写啊,嗯,这个题目的话呢,咱们需要呢,在这儿记录一下,这个叫count个数,哎,Count个数呢,一开始是个零,咱们最后呢,是让它返回的就是这个count。哎,返回的就是这个count了,返回这个count,然后呢,关键就看里边这个count加加过几次,咱们刚才提到过这个问题,说呢,我们还得去定义一个量啊,这个我们定义量也写到这吧,叫index了。好,那首先依附一下这个index呢,去赋个值,就是咱们的叫may str,它呢叫index of,找一下这个sub。把这个结果呢,付给这个index,然后然后呢,咱们判断一下,就是这种我把这个步骤写一起了啊,判断一下这个得到的这个index呢,是不是负一。
08:05
这个代码看能不能看得懂。这我做了两个事啊,第一个呢,是先调这个方法返回一个值,接着拿这个值呢,判断是不是负一,如果这个值不是负一,说明找到了,找到的话呢,里边我们就紧接着先加加一下,加加完以后呢,你不能这样不做任何的这个迭代条件啊,接着又判断这是死循环了,我们下边呢需要做一个修改。刚才说过了,其实咱们相当于是把这个当年这个MXR呢给它改了,改成什么呢?改成它的sub string,让它呢是index,再加上一个sub itr.length。理解吧,哎,这不就刚才说的这个事儿,那比如说咱们刚才返回的index就是它了,所以咱们呢,是让这个得到的index再加上我们的这个长度,长度是二,相当于是找到这个K了,我们呢,截取原来这个字符串当中的子串,子串呢就是它让这个子串又重新充当了咱们这个may atr,然后你再回到这个衣服当中,再看一下新的这个may atr当中,哎,它出现的位置是不是负一。
09:20
哎,这样子去考虑。那整个这个完了以后,我们就能够计算出来一个count。对吧。诶,就这样来考虑的啊,行,其实这个count的默认值是个零,你也可以把这两个其实合成一起啊,就是我也不要这个else了,就是这个也不要了,直接你就return count,行,他要是没进去过呢,其实自然的也是个零也行啊洗完以后呢,咱们测试一下public VO test叫get一个count,那那这呢,我们需要去定义这两个周串。
10:01
那它呢,我们不妨呢,就拿上面这个题目来演示啊,CTRLC。那这呢,就让它是AB来调一下我们这个方法。哎,Out enter,得到一个count,然后count.out一下,那这个题目当中出现了一次两次,三次四次。哎,结果呢,诶出现是一是吧,嗯,怎么出现是一了呢?怎么是一啊啊写没写什么,没写循环是吧,就是这块的话呢,我们呃判断是不是有它这个我应该改成是一个是不是well啊,那if的话就执行一次了,Well这边就是找到以后呢,接着走接着走接着走,当你这个不是负,呃当你这个是负一的时候呢,就调出呗,哎再来这就搞定了四哎,这是我们这道题目的一个解决方案啊,那么这个写完以后的话呢,哎,可能你还得再去想啊,说这里边有没有可能效率比较差的位置呢,差的话呢,差到哪了呢?
11:39
差到是不是你每次这块呢,相当于是不是又重新又造了一个may itr,就是相当于可能会出现不断的对这个may itr呢进行修改是吧,说能不能不改啊,就是你像这个字符串,我就找完这块以后,我就接着往后找,你别这个让这个mayi呢再改了,其实也可以。
12:02
完全的都归结于你对string的方法呢,是不是熟悉,我把这个呢注释掉,这个呢叫方式一。下面呢,写一个它的改进。啊,所以让大家说你这个方法得熟,这个熟的话呢,你这个写代码这个效率呢,就可能会更高一些,在咱们给的这些方法当中,我们看一看,有一咱们刚才调的相当于是这个,那除了这个之外呢,还有一个。说呢,我们判断一下当前字符串中是不是有这个字符串,从这个位置开始找。从这个位置开始找,我们用一下这个方法看啊,是不是还是写well对吧,写well呢,这个位置我还是一个index,然后等于这个呢,是一个mayr找它的index of,只不过呢,咱们sub itr以后,后边再放个东西,从哪个位置开始找。
13:05
然后判断这个位置呢,其实是不等于,也是不等于这个负一。哎,这么着,然后呢,这里边这个count呢,找到了,肯定还是加加了啊,这个时候呢,我们并不是说对现有的这个,呃,这个主字符串呢,进行了一个修改,没有我们呢,只是呢,每次当你找到以后,接下来我这个位置变了。比如说咱们刚开始的时候呢,从头找。嗯,一旦呢,你找到一个index以后,我再接下来呢,就不从这个从头再找了index,哎从index准确的说index是不是还得加,等一下,我们这个叫sub这个这个这个sub这个啊,上面写的他的LA斯了是吧,就他呗这个位置呢,别写零就写index呗。那这个时候你写的index,因为我们这刚开始的时候呢,你不能一上来就用它还没赋过值,这个呢,给个值就可以了。
14:06
跑一下。这不还是可以的,嗯,此时的话呢,我们并没有每次对mayr呢进行重新赋值,就是拿着你唯一的一个mayr,只不过呢,相当于有一个指针一样啊,哎,我一开始找某个index,接着呢再去从后边一个开始去,再往后的去找,所以这种方式呢,显然比这种呢要好看,这呢是我们这道题的解决方式啊。嗯,那个else里边访问零感觉有点不合,不合啥意思。不满足的情况下执行。嗯,没太听清楚,就是这个零呢,这不是代表的,就是说如果你这个长度比它还长是吧,长的话呢,出现次数不就是零吗?零是满足比较过程。
15:14
不一,嗯,不是这个没有的话,它不就是零啊,就是没出现过,就这个意思,没出现过是不是就是零啊,嗯,就是你这个长,就是你想判断他在这里边出现过几次,没出现过吗?哎,我就直接写个零也也可以的是吧。也OK啊,就是你总不至于让他抛个异常吧,抛异常不太合适啊,因为我这边我写他出现过几次,那没出现就是零呗,没有必要让他抛个异常了啊,这个体会一下啊,对吧,可以这样写啊。
我来说两句