00:01
好,我们在这个视频当中呢,我们把这个利用站的这个算法呢,我们把这个题目给它写出来啊。嗯,写出来的话,我们把它,呃创建就是站这样的一个题目。好,然后咱们再呃,老规矩把题目给抄一下。把这个题目复制过来啊。好,写这个注释。好,那现在的话呢,我们就可以按照咱们之前视频的这个思路啊。之前视频的思路已经写在这个底下了啊,那么有这么几种情况对吧?哎,然后把这个代码写出来啊,首先我们就先需要定义这个函数叫smart repeat。然后这里收到的,呃,这里实际上就要收一个模板字符串,也就是说这个3ABC啊,这个32A2B啊,还有这一串呢,实际上都是模板字符串,那它怎么突然间成模板了呢?就是根据某一种语法,咱们自创的这种语法啊,实际上它是模板啊,就是根据这种自创的这种语法,咱们实际上它也是这种模板。
01:17
好,那这种模板字符串,哎,然后咱们看一下这个函数,这个函数首先肯定第一步是要有个指针,好,第二步呢,准备两个站。好两个站啊,第一个站就是咱们PPT上左边这个是存放数字的站啊。就是存放这个二啊三啊这些数字,哎,这个占啊第二个。好,这是战一啊,这是战二,好,战二的话,我们管它叫STA2,带二的话,我们要存放临时字符串。哎,OK,然后接下来的话呢,嗯,我们就要开始去想办法去便利啊,便利咱们的这个,呃,这个程序那怎么便利呢,很简单,用while。
02:11
那为什么这里要用while语句不是for循环呢?原因其实很简单啊,因为呃,我们现在呢,它这个指针便离到最后就代表便利结束啊,他那你这时候肯定会说老师。那为什么我们不嗯就是不用for循环,因为for循环的话,那个变量I循环变量I不是也是指针的意思吗?对吧?哎,这个点呢,其实就嗯,其实呢,这个就是一个嗯个人的一个习惯,因为咱们这个指针现在是只会后移啊,确实他每次移动呢,它只会移动一位到两位,对吧?哎,是这样子的啊,那么但是呢,它有一种情况,它就会移动的多,那那什么呢?就是当你这个数字长,比如说是。33啊,我要将后边的东西重复33遍,然后这个是12遍。
03:00
那你这个时候的话,你发没发现,你现在就要便利两位数字啊,才能去得到33这个数字。这就说明什么呢?这就说明如果你要用for循环的话,For循环的话,它的步长是爱加加,它这个步长是固定的,所以它这个时候不如这个指针来的灵活啊,所以这块也是一个这样的一个考量。好,那当什么时候它就啊要继续循环下去呢?对,就是当这个指针还小于最后一位的时候。对吧,诶最后一位是什么,是不是它的Les减一啊,就当还在还在它前一位的时候啊,所以这块是小于。啊,这块不能加等于号。啊,这块不能加等于号,因为是小于号,为什么不能加等于呢?加等于是他最后一位,最后一位呢,就不需要再执行了啊,就到最后这一位就不需要再执行了,我们就结束到最后一位,因为最后一位它一定是一个方括号。这个模板对吧,最后一位一定是个方括号,然后这个方括号它就为空了。啊,如果你再多便利一位的话,这个时候他就设必他又需要谈一次战,而一谈战的话的话,你就会发现他他他这个规则就没法满足了,这个规则不是要往刚刚弹出的这个啊上一个新的站顶对吧,而他现在没有新的站顶了对吧?哎,他是安迪万了啊,所以咱们就便利到最后一项啊,这块是一个很讲究的好吧,哎,就OK了。
04:25
好,那现在你写的这个循环语句呢,它就是一个死循环,为什么说是一个死循环呢?因为你这个循环条件永远在满足,你这个index没变呀,所以我们就可以在这里啊,假装让这个指针后移一下。对吧,哎,假装让指针后移一下,然后呢,输出我们这个template ST。啊,然后方括号呃,Index这项好吧,哎,然后我们可以调用一下这个函数啊。调用一下这个函数,我们直接把这个字符串对吧,半难不难的给它放进去,注意这是个字符串模板。好,然后这个时候我们来看一下。
05:01
虽然没写几行代码,但是呢,老师还是愿意咱们测试一下。诶,他就把这个模板你看是不是就给你印出来了啊,方括号二方括号A方括号啊就是呃,右方括号二,左方括号B,然后两个右方括号,哎,是这样子的。所以现在的话你就会发现,嗯,就编程的话,它需要一种节奏感啊,他编程的时候需要一种节奏感,诶就不是说你要写一堆才能测试,你现在就可以测试好,那接下来的话呢,就开始啊去按照咱们这个逻辑开始去走了,对吧?哎,那如果这个字符是数字就要压榨,那这个时候是不是叫判断现在它是不是数字啊。对不对,哎,对,他就需要去判断,现在他这个东西是不是在以数字开头。那他是不是在以数字开头,其实很简单,那现在什么是以数字开头,就是判断是不是指针指向的这个这个地方,指针指向的这个地方。
06:00
大家能理解吗?对吧,指针指向的这个地方,然后是什么?那对,然后它后边的东西是不是以字符串开头,所以说现在的话等于说指针指向的这个地方啊,我们就称为剩余部分,哎,剩余部分我们用light吧,因为它毕竟是个块啊,其实用腕也行,用Y的话就最好不要每次循环就定义腕,诶,可以定义在外头,这叫剩余部分啊,咱们定义在外头也行,叫rest。好,那一开始剩余部分不就是它本身吗?啊,当然这个设不设也无所谓了,因为我一进到外有一句,我就会把剩余部分改写成当前你这个。东西的subst string,哎,D index指针指向的这个位置啊,那subs string按理说应该有两个参数。啊,它的功能实际上呢,就是获得这个字符串的子字符串,但是我这里只给他了一个参数,一个参数什么意思,他是不是就将从这一位开始啊,把后到最后的所有位都会返回啊。
07:01
我们现在来看一下,比如说我们现在来测试一下啊,叫我爱上硅谷啊的前端学科,好,那这个时候如果我要substre一下啊三,那你这个时候你会发现它会从这个硅谷前端学科开始返回所有的字样,因为这是零,这是一,这是二,这是三呀。对吧,哎,所以我我只写了三啊,我并没有写,比如说并没有写一个七,它不会就返回从第三位到第七位,但是不包括第七位,就是三到六啊,哎,这是三到六,而这是三到最后,所以这个呢,就是剩余部分。这个大家应该能理解,那我现在就可以把这个剩余部分给印出来,哎,你看每次剩余部分都不一样,那这个时候呢,我们就需要学正则,正则当中正则表达是什么方法比较好用啊,大家其实对正则表达式的话其实是了解的,但是呢,面试官可能经常会问你一句话,就是关于正则表达式的什么方法啊,我们把这个把把这个新建一下啊,咱们给大家新建一个幻灯片,就相当于新建一个笔记。
08:07
啊,新建一个笔记,就关于正则表达式,正则表达式的相关方法啊。正则表达式的相关方法呢,其实工作当中最常见的就三个,大家一定要记住啊,第一个呢,就是replace啊,这块正则表,比如a replace,什么ABCDEFG,然后123啊呃,然后MNP对吧?好,然后我这个时候,比如说我要把这里的所有数字啊都删掉。那我这个时候就可以用replace,哎,这个时候可以用正则表达式把所有的数字。啊,都删掉好,那这个时候呢,你看数字就删掉了,所以第一个就是replace。啊,大家一定要记住是最最最最常见的方法啊,Replace可以说是呃,工作中比较常用的啊,那咱们说了工作中比较常用的正则方法其实是三个啊,那么第一个呢,就是replace,好,我们把这个截图。
09:00
放到PPT当中啊。好,那么第二个呢,实际上就叫做啊search search search的话,顾名思义是不是就是寻找啊,对吧,哎,寻找,那search是什么意思呢?比如说我们现在还是这个字符串。哎,还是这个字符串,那我这个时候呢,我就可以去search。好,Search试一下,四试一下,比如说我现在去寻找杠D,哎,那这个时候你看他就会告诉你第一个数字出现在这个三这个位置,那如果我在这加个G呢,诶,那它是不是也是寻找啊,下标为三的位置也是search的话,它是呃,不会去寻找这个所有的,那它是会寻找你当前第一个啊,就是匹配到的这个。啊,第一个啊,这个search。那这个时候呢,还有一个特别相似的方法啊,咱们先把这个给你。截过来。哎,给大家做一下笔记啊好,还有一个特别相似的东西呢,那这个东西的名字就叫做match match啊match的话,那这时候你就会发现,你看是不是杠D啊诶。
10:13
它是不是就会返回,你看这第一个数字是不是在这儿,它下边是三。发现了吗?第一个数字在这,它下边是三。啊,但是如果说你要给它加个G,你发没发现这个时候有没有发现它就比search。要好用。啊,就这里的这个杠DG,诶,你发没发现,只要他有一个G这样的一个修饰符,就寻找全局,那这个match实际上它能起到search你认为的那个功能。啊,所以这是老师说的工作中比较常见的就是match而不是search啊,大家一定要记住哎,就是match要比search好用啊,那这里呢,我就给大家做一张图,咱们用一张图吧,就这个四加G是没用的。好吧,哎,咱们现在注意看啊,就是search方法加g search方法啊,加这个G修饰符,哎,没有没有用。
11:09
啊,没有用,它还是寻找第一个数字出现的位置,但是这个match加了G,它是不是太好用了,它是不是能寻找所有出现的位置,对吧?啊,当然我们一会儿要用match啊,但是那个match是不加G的,一会儿我们再说,先给你总结复习一下啊,Match方法加G,哎,就非常好用,能够。寻找到所有匹配啊,Match就是匹配这个意思,Match就是匹配的意思,哎,匹配的这样的一个字符。所以这个match是我们工作中非常常用的啊,我们把刚才这图删了,我们把这个新图一起粘上去,哎,所以大家一定要记住,常用的三个是replace和match,还有一个啊,还有一个,那就是test。啊,T的就是用来检测它是不是符合。啊,检测它是不是符合,那咱们现在来看一下test是什么意思呢?Test就是,呃,我们现在来看用test是正则的方法。
12:08
啊,比如说我们现在检查它是不是数字开头,那我这个时候就可以用这个尖角号对吧,杠D,哎,我就可以test一个ABC,那这个时候它就是false啊,但是5ABC它就是true,因为它是以数字开头。所以T的是非常非常好用的,这个大家应该能理解对吧,哎,T的是非常非常。啊,有有有有有,呃,好用的这个东西啊。是这样子的。好,我们把这个。给你放到这个PPT上啊,大家一定要记住,老师在这里还是嗯,蛮蛮蛮那什么的对吧?哎,蛮近人情的啊,还是帮你复习了一下,所以我们在这里为什么要用正则呢?因为我们在这里遇见的任务很简单,就是要看你现在这个剩余部分。剩余部分就是指针指向的,当前指针指向的这个地方看。
13:04
对吧,指针指向的这个地方。是吧,哎,然后它是不是以数字开头啊,是不是字母,或者说是不是这个方括号。啊是这样子的,所以这块呢,就需要用test的方法来进行一个测试。对吧?哎,所以说我们现在来看啊,看当前啊,看当前这个剩余部分,剩余部分是不是以所谓的呃,数字开头,哎,数字开头咱们这个注意啊,这个字符串当中是不允许出现数字的,就比如说这块是不允许出现,就这里的普通文字是不允许出现这个的啊这个咱们在PPT上已经说了,是非法的。哎,是这种是非法情况。啊,就说只能出现文字,这种数字出现在里头的话,他就会视为啊错误对吧,那你说老师我就想把66A重复两遍,哎呀,对不起,这道题啊,他就是这么出的啊,但是如果说你要是想把66A也当做是呃,也当做循环,就说你的要求比较高啊,就是也想把这种合法数字怎么的,那其实的话,那这块其实可以去判断它是不是以数字和方括号开头。
14:15
能理解吗?就是数字后边是不是一定是方括号啊。啊,所以这块咱们就可以看一下,用正则去检查它,那这是开头。对吧,这是数字数字加,因为这个数字可能有一位或者多位,对吧,然后后边是一个方括号,那这个方括号一定要加转移啊转移斜杠,好我们来test一下。哎,Test一下test一下这个rest好,那这个时候我们就开始就说以啊数字开头对吧,哎,我们就这依附语句少了一个右括号啊这样子的啊,就如果它test啊,Test这个rest。哎,他如果这个政策匹配对吧,他就是以数字开头。
15:00
啊,那这个时候的话,我们可以看一下把这个。把这个rest的都输出一下,咱们来看一下它是不是能真真正正的检查,对现在这字符串是这个,然后咱们来输出看一下,你看它是不是这一次判断出以数字开头了,对吧,然后这一次判断出以数字开头没问题吧,然后这一次也判断出以数字开头非常的好,对不对。哎,三次以数字开头,这里正好是三个数字啊好,那他如果是以数字加方括号开头的时候,那这个时候我要干什么。这个时候是不是就要干这件事了?啊,把数字压占,然后空字符串压占。对吧。压一个空字方扇进去,咱们都说了,那所以说这个时候我们就需要得到这个数字,得到这个数字,那为了得到这个数字的话,咱们看看PPT,我们刚才给大家总结的三个方法,一个是replace方法,肯定不能用吧,还有一个是不是就是match方法,老师说了match方法是不是特别好用,对我要去寻找这部分啊,然后卖市方法,它的好处是还可以分组补货。
16:02
啊,还可以分组捕获,咱们来看一下怎么回事吧,就是比如说我现在想去寻找这个字符串开头的数字,比如说它是34ABC,好,那怎么办,是不是就卖吃就行。Match的话怎么写?那很简单呀,正则开头,然后数字加,然后放括号。对吧,哎,Match一下,但是这个时候的话,他会要他这要加个转义对吧,那他这个时候他捕获的是什么,他捕获的是不是个三四方括号啊,对吧?哎,所以这个时候你可以加一个分组标记,就是在这里加一个分组标记啊,圆括号就是分组嘛。啊,那这个不是分组标记说错了啊,口误加个补货,补货啊,圆括号有两个功能,一个是补货,一个是分组,那这里是补获。就我要求捕获这个杠地家。那所以说这里是不是他就能捕获到这个34啊,对吧,这个34呢,就会比刚才这个结果数组多一项,它会出现在下标唯一的这项当中。啊,所以我们把这个有补货和没补货的区别,我给大家也截张图,因为正则表达式大家可能真的会虚虚的啊,那我们现在就给你截张图,你看一看这个你的补货的结果是不是出现在了下标唯一的项对吧?哎,下标唯一的这个项上,你的这个补货的结果就出现在了这。
17:21
啊,那这个是没有补货啊,这个圆括号表示补货啊,一定要记住圆括号表示补货。啊,它有两个功能,一个是分组,一个是补货,那这里就是补货。对吧,哎,我们把这个也放到这个PPT上,咱们新建一页,咱们让咱们同学呢,能够真真正正的学会,所以学VI源码它的,嗯,本质秘密就是提高自己的编程能力嘛,本质用意。好,那这个时候怎么办呢?就可以得到这个数字,很简单呀,那这个时候我们是不是就可以用咱们的这个right去match那个正则表达式,对吧?哎,就跟这个正则是类似的,我们就直接写,然后这块要补货。
18:01
好,Match一下就行。啊,Match一下就行,那由于你现在呢,已经是一付进来的,所以这个match是一定有答案的啊,这个match是一定有答案的,所以这个时候就可以直接把这个times,哎,就是这个数字就可以直接用它方括号一了。啊,可以直接方块一了,但是方块一你可以看见刚才PPT上这是不是字符串啊,所以可以给他转成数字,用number转一下。对吧,好,然后我们再把这times给输出。啊,咱们可以看一下这样的话,这个结果对吗?刷新对他是不是把三提炼出来了,二提炼出来了,二也提炼出来了,没问题吧?哎,那这个时候其实这个指针不是加加啊,比如说这块是333。啊,这个数字,那你会发现它实际上是捕获到了333和33和三,它是不是捕获了三次,哎,这是因为你指针移动的慢了。明白吗?你指针移动的慢了,对,所以说你这个指针是不是要去加上你这个重复的这个次数的长度,就是它是几位数,能理解吗?所以说这个指针不是说就加加。
19:09
啊,不是就加加啊,这个指针你看L咱们就加加,但是呢,在这个时候,这个指针是不是要加这个times的这个长度。啊,Times的lengths,哎,就加这个长度啊,这是333,但是呢,这个加times的Les是有问题的,数字是没有Les的啊,它必须要to string。哎,就再把它转成字符串。啊,就再把它转成字符串,看它长度,也就是说这是个几位数啊,我们就让指针移动几,也就相当于它捕获到这个,呃,33之后,大家注意看啊,他捕获到比如说333之后,它就直接跳到这了。啊,那有的同学说老师你这个位对吧,这一位也可以不用再扫了,因为你不是说了吗,这一位已经是。放大括号了,所以这块可以再加一位。哎,就再加一位,所以说这里呢,就是让咱们的这个指针后移啊,也就是说TIME4这个数字是多少位就后移多少位,加一位,那么为什么要加一呢?哎,这加的一位是方括号,明白吗?哎,是要把这方括号也错过去。
20:20
啊,这样子的。好了,那这个时候的话,我们就判断出了以数字开头,然后我们也判断出了这个times对吧?好,然后也让指针后移啊,那这个时候的话,你别光什么指针后移,你这件事你要做呀。那是不是有两件事,第一要把数字压占,第二要把空字符串压占呀,所以这个时候我们就要把这个数字压占,这个数字是什么呢?就是sta。一我们叫push压战,不就是push吗?哎,这个times第二呢,就是这个字符串。哎,STA2啊,我们就要把这个呃,空字符串加上啊,对吧,所以这个时候我们就把这句话。啊,粘上了,如果这个数字是数字,哎,那么就把数字压占啊,这个如果不写了,就把数字压占,把空子符串压上。
21:06
发现了吗?就很很很简单,那所以说咱们现在可以看一下这个站的运行情况啊,我们首先先conso.log哎,咱们首先先看嗯当前的这个,嗯,当前的这个指针吧,Index啊然后。战1STA1和STA2。好,那这个时候我们就可以看一下这个指针是怎么运行的了啊,把这个conso也删掉啊,咱们力求精简好,那一上来的话,你会发现咱们把这个往上往上头啊,哎,那一上来的话指针是零,两个站都是空的,然后指针挪到了四,是不是333这边是空的对吧?然后指针挪到了第六位,3432,这是空的什么意思呢?我们现在这个是呃。咱们把PPT和他统一一下啊,PPT和他统一下。对吧?哎,那咱们对应一下啊,咱别乱对应一下,你看为什么一上来是不是零指针指向这个零吧,然后两个站都是空的,然后指针会移动到下标为四这项,这是下标为四这项啊01234对吧?哎,然后把333当前那那一下已经把333加进去了,空子片也进去了,然后指针移动到这这个时候对吧,3332没问题吧,哎,然后呃,对吧,没有没有,那为什么会输出这么多,因为你只要不是遇见这个数字,它就是一位一位挪。
22:30
啊,然后最后呢,他就会把这个都加进去三个字符串。所以咱们已经把第一个事做清楚了啊,然后第二个事儿呢,就开始了,就是如果这个字符是字母,那么就把占顶这项改成这个字母。能理解了吗?哎,对,那这个时候我们就要需要判断它是不是字母啊,那字母的话怎么来判断它是不是字母啊,就是说我们要来判断它的字母,对,那这个时候我们就需要来判断它是不是A,呃,小写A到Z,大写A到Z,然后是不是呃数字啊,因为咱们刚才说了,数字也是可以出现在这了啊,所以这块就可以再判断啊,Else if啊,咱们再去写,就是如果你当前这块是是什么,就当前你的剩余,剩余字符串它。
23:17
整个都是字母对吧?哎,它是字母的,所以说咱们现在呢,呃,并且这个字母大家有没有发现,就是这些字母是不是最后都是以方括号结束的。对吧,所以他这个时候呢,也就相当于现在我们要测试它后边是一个方括号,然后呢,这个时候它是。以什么开头,对,就是以这个字母开头,那这个字母其实可以用杠W来表示啊,杠W-W的话就表示的是呃,咱们这个小写小写字母大写字母数字啊,还有一个呃下划线对吧?哎,就是咱们这个呃杠W啊,咱们可以百度搜一下,因为这块确实是有点混淆,咱们搜一下啊好就JS的正则杠W是什么意思?
24:02
看一下杠W是什么意思啊?好,杠W是匹配字母数字下划线啊,还有汉字它也是可以的,好吧,哎,所以这样去匹配l if,它它是以这个杠W,然后以这个右方括号这样开头的。对吧,哎,以这个正则形式开头啊,Rest。好,那我在这种情况下,我就把这个rest我们给输出,你看没看见老师,老师怎么办呢?是不是一点一边写一边测试啊刷新咱们来看一下,诶对不起,现在这块少了一大一加加啊这块再加个index,因为它有的时候不是这种情况是吧?哎,这指针一定要后移,要不然的话它就容易死循环。好,刚才那个死了啊。好,这个时候你看是不是这个A和这个B没错吧,他没丢吧,就这个A和这个B是这个字母吧。没毛病吧,这个A和这个B。对吧,哎是这个字母吧,哎,所以这两个情况啊。
25:02
好,那么字母的时候,我们这个时候干什么。对,这个时候就需要把占顶啊,那你说老师你为什么要做这件事儿,我已经在上个视频啊,帮大家慢慢的是不是分析了这个原因呀。对吧,哎,我已经在上个视频帮大家慢慢分析这个原因了,所以你只要上个视频看懂,那这块是一定能懂的,那这个时候我们就要把占顶啊,就是啊这项改为这个字母啊,改为这个字母,那是不是就是大二的啊,最后一项那是不是就是二的Les。减一这一项,好,我就需要改成你当前的这个字母,那这个字母的话,是不是又需要用用这个word啊,哎,又需要用这个卖吃方法,Rest点卖吃方法,我又需要给他拿到。把这政策抄一下,然后给他加个补货。哎,这个杠W,当然这个杠W这块少了一个加号是吧?哎,杠W少了个加号啊。
26:01
好,那我这块就要拿到它啊,拿到它之后呢,我们这块加个方号一,为什么加方一,因为它结果是个数组下标为一的这些才是你拿到的这个词,好就改写成这个word就可以了。啊,改写成这个word。就没有任何问题啊,OK。好。这样。然后接下来的话,嗯,干什么,指针是不是后移,那指针后移的话,是不是指针并不是移动移位,比如说这里是ABC。然后这里变成D对吧,我们把这块也改一下ABC,这里变成D。啊,那它是不是要移动三维指针,所以这块呢,它就要移动你这个word的Les,哎,所以这块呢,就要去移动指针。啊,咱们移动指针这句话啊,挪到后边,挪到每一个里头,最后啊叫移动指针。哎,Word这个词。
27:01
哎,是多少位就移多少位。啊,这块不用加一位啊,非常的简单。看见了吗?好,那这个时候我们再来看一下这个两个站的这个情况啊,那这样的话我们刷新看一下,诶,你就会发现看见没有,是不是ABC进站了在这。对吧,然后这个D是不是也进站了,那这里多了一些空字符串是对的啊,因为我们上个视频已经讲过了,它是先伴随着空字符串的进站而进站的。对吧,哎,它是它是伴随着这个空字符串的这个进站而进站的。啊,你这个空子无上会进站呀。对吧,诶而进战的,所以这个时候呢,他就会多这样的一个,呃,就是多这样的一个这个这个这个这个东西啊,这块要大家要明白。好,那接下来的话呢,呃,就是这块会多这个控制物串啊。好了,那么接下来的话就是第三种,就是如果是右方括号。
28:02
对吧,因为咱们现在写到现在的话,你都不知道咱在这干嘛呢。对吧,你都不知道咱的程序在干嘛呢啊,就是你就感觉这驴顿不能拔醉,但是只要你把出站逻辑一醉一做,那是不是就基本就对了,哎,对,如果他是右方括号,那么这个时候呢,特别麻烦。啊,特别麻烦,咱们来看一下为什么麻烦,因为他这里说的做的事很多,说的是什么,是不是你的这个数字就这个战衣要谈战。对吧,就是你这个大一要涉及到谈战。然后这个是要干什么,诶对,然后你是不是要把那个那个那个那个那个那个战二的。就战二当前顶部那一项啊,战二当前顶部那一项。对吧,哎,怎么办。去拼上啊,就你你刚刚。弹的那个STA1的那一项。啊的那个指定次数。所以咱们把这块给总结出来,就是说第一个呢,是要将带一谈站。
29:00
对吧,诶第二个呢,是要把这个这个字符串。啊,你要把这个字符串要弹上。这个字符串可以先谈战啊,那就是STA2是不是也谈战。然后第三个事儿呢,就要把字符串占的占顶就是新占顶。占的新站顶那个元素。是吧,哎,然后重复啊对,重复刚才那个人拼上指定字数对吧,重复啊,重复刚刚弹出的那个啊那个字符串,哎,并且指定次数啊,指定次数。哎,拼接到这个新占领上,所以他要做三件事。啊,它叫三件事,咱们把这写上,第一磁带是医药谈战。第二是不是二叫谈战,第三是最麻烦的。啊,当然这个第三到底在这要做什么事,咱们在上个视频已经讲的很清楚了啊,就上个视频邵老师也要求大家自己拿PPT上这个小指针,结合这两个指针是不是一步一步的做呀,啊咱们可以再做一遍啊,首先第一步就是333进站,哎这块还是担心大家没懂为什么,所以这块还是给大家你看,首先333进站这数很小啊,好,然后二进站对吧,当然这两个数字进站就会有两个空字符差,然后遇见ABC了,是不是就把它改写成这个ABC啊,然后遇见方括号,这个事就比较麻烦。
30:25
啊,这个时候就要他谈战,他也谈战,然后呢,它就要改写,把它原来这个空的拼接成刚弹的这两个东西,一个二,一个ABC的两倍,就是把ABC重复两边,因为你这边弹了个C,这边弹了个二,所以它就拼接成两倍,改它就行,是这样来的,好,然后又遇见个二,二再进站,然后这边再进一个空,然后这边呃,遇见了一个D,然后这时改写成D,然后再遇见一个空,怎么办?诶对,他也出战,他也出战,然后把这个D呢重复两遍,拼后头。看见没有,哎,这不咱们上个视频说的嘛,所以这块实际上是三步啊,那咱们第一步咱们来做else if啊,咱们要写清楚,就是如果这个字符刚好就是一个空。
31:07
好,就是如果你的rise的D零下刚好就是一个。右方括号。发现了吗?哎,就刚好是个右方括号。好,那这个时候干嘛,首先第一步是不是我们就要从战一当中去谈一下谈战啊,谈战就是pop对尾进行操作呀。对吧,那泡泡方法它是会返回刚刚弹出的元素的,所以这个时候我们就可以把这个times。啊,给你写在这个light上。啊就存出来对吧,哎,然后第二呢,就占二也要谈战,那咱们这叫word啊,那就是START2。他也要泡一下。哎,他谈战,他也谈战。没问题,好,咱们现在先来看一下站的变化,看见没有,这个时候是不是ABC进去了,遇见遇见下标为十这一项啊,就是放右方括号,它这个时候站就空了,发现了吗?对吧?然后最后地进去了,然后右方括号来了,地也空了啊,但是为什么这个D他一直还在呢?这是因为我们没有对吧?哎,还还少写了一句,还少写了一句。
32:12
啊啊,并且这个这个index指针加的也不呃指针这是加一没没错啊,他这块还没写对啊,因为你最后它是指到最后一位嘛,最后一位如果正好是放括号,它就少弹一次嘛,对吧?好,那这个时候怎么办?诶对我们这个时候就需要干嘛,就需要将此时这个STACK2,你最终目的是不是STACK2的占顶那一项你要改呀。对吧?哎,所以说占点这一项是不是就带二的这个Les减一这一项,当前新占点要加上你这个word repeat这么多次啊。哎,Repeat是咱们ES6的方法啊,Repeat是ES6的方法啊,比如咱们现在字母a.repeat。哎,一个三,那么得到了AAA。啊,就是repeat就表示重复就行了,这样子的。
33:02
那这样的话,一来咱们大家可以看一下,咱们现在这不就是2ABC2D吗?那你看这个ABC是不是在这里重复了两遍,那你说老师这个D没有被重复两遍呀,对吧?哎,这是因为咱们现在这个便利是不是少了啊,咱们这个便利是不是少少便利了一次,咱们看看哪错了啊。到最后这个index便利到了几,它便利到了下标为13这项。我们看一看,这个下标为13,这是几啊,零一二三四五六七八九十,11,十二十三,哎,它是不是少便利了一下。对吧?哎,所以说到便利这一项它才变啊,那换句话说,我们这个conso写到上边去了,如果我把这个console写到下边去,那不就对了吗。对吧,写到下边去,你看这不就对了吗?这个ABC是两遍吧,然后这个D在出站,是不是它重复了两遍DD,所以说你看咱们这不就是两个ABC2个D吗?那不就是两个ABC2个D吗?那如果说这改成四,那是不是就是两个ABC4个D。
34:02
对吧?哎,然后但是呢,你这个循环结束了,循环结束之后,你最终你这个函数没有返回值啊,那最终这个函数返回什么?对,就把它返回它这么多倍不就完了吗。因为你别忘了这个字符串它一定是以数字开头,对吧?这个字符串一定是以数字开头,一定是以数字开头,一定是以一个方括号结尾的,所以最后你还欠了一项,那最后欠的这一项不就最后就是循环语句遍历完之后,占当中肯定还剩一项,明白吗?就是while结束之后啊,咱们的这个STACK1和STACK2中肯定还剩一项。哎,还剩一项,那如果剩的少,那就说明用户少了方括号了。能理解吗?就是如果剩的剩的不对啊,剩的个数不对,那就是用户的问题,那就是咱们的用户的问题,就调用的问题啊,就比如说你的呃,方括号没有闭合啊,没有闭合等等原因这样子的。
35:12
对吧,那你不用考虑这个问题,所以这个时候我是不是就可以直接返回把我占二剩的那一项。对吧,哎,然后repeat,哎,对战一胜的那一项,那么多次不就行了吗。对吧,诶那么多次repeat,它会自动把它这个本来就是数字不用转。啊,还剩一项,所以说这个时候就返回啊,二号站对吧,或者说叫站二中。剩下的这一项重复占一中,剩下的这一项啊,这个次数啊,这个值这个这这这这这这个字符串,哎,组成的这个字符串就是最终的结果。就行了,所以这块的话,你就可以直接比如说挖一个result,好等于说这个函数有返回值了,这不有return值了吗?那我这个时候我就可以把这个result给他进行输出。
36:11
好,那你看哎呦,这333太多了啊,咱们比他给他重复三遍吧,你看它是不是就三遍ABC abcddd ABC abcddd abcd对吧,就好用了,那实际上这里头可以是数字啊,比如说两倍的两倍的7ABC啊,那这个是两个7ABC 7ABCDDABC7比CDDDD,七页比C,七比CD对吧?为什么可以出现数数字呢?因为这个数字后边是没有跟上方括号的。啊,没有跟上方括号的,它是可以的啊,为啥呢?因为你看这块它不是有一个方块开头吗?所以这个数字是不会被误会的,这个数字七呢是不会被误会的。好吧,哎,那你有没有发现用战来去解决问题确实很巧妙,但是邵老师要说,但是就是他写的时候呢,你会发现牛头不对马嘴,但是到最后一刻他出效果了。
37:06
啊,这个呢,就是算法的一个,呃,占这个算法的一个特别恶心的地方,就是你要调试用站书写的这个程序,你必须必须必须要把手动便利这个关你要过了。就是你一定一定要,比如说你在工作中遇见了一个类似的算法,对吧?哎,遇见了一个类似算法,那么遇见了这个类似算法的时候,这个时候呢,我们就必须要在这儿啊,拨弄这个小指针啊,我就必须要去拨弄一下这个小指针,你看就这个对吧,走走走走走走走走对吧,我们我们现在是不是要拨弄这个小指针啊。看见了吗?拨动这个小指针,然后把左边的这个站和右边的这个站到底会发生什么样的情况啊,你要在这个PPT的这个版面上明明白白的给操演出来。你发现没有,就是你要得到这个执行的这个方法论。
38:03
也就是说,最值钱的是现在你看见的这几段字。啊,就这个这个方法论,你要得到之后,然后写程序才能写对。啊,要不然的话,你这个写占这个这个程序你会写出来的话,你牛头不对马嘴,那你说老师你学这玩意有意义吗?特别有意义,因为咱们包括嗯,后边咱们马上要学的这个ast抽象语法术的建立,实际上它就有占这个知识。明白吧,哎,他就利用了占这个东西的知识啊,所以这个时候呢,那你现在就必须需要把这个例子先去给他看懂,这个例子如果看不懂的话,那就真的是比较麻烦。啊,这个例子而而不骗大家,这个题真的是啊,一个两个公司的面试题,一个是字节,一个是滴滴啊,那这两个题呢,是因为老师曾经带过的学生特别的多啊,很多带过的学生都会把面试什么题告诉老师,诶,所以这道题呢,需要大家来深刻的去给他,呃,就是自己真正的能给能给他写出来。
39:03
啊,真真正正的能给他写出来才行,对吧?哎,你看看当前收益部分是不是以数字开头,如果是的话,两边压站。这个压站,这个压工资不赚啊,然后如果是字符,那么我就让二号站的站顶等于这个词。哎,然后指针后移指定长度,然后如果是方括号的话,那么这个出战,这个也出战,然后让新站顶这一项改掉,拼上你刚出站的这个人的次数。对吧?哎,那这个时候你可能还会问一个问题,就是说老师你你是怎么想出来这个方法的啊,那其实呢,这个方法是呃,非常经典的算法啊,就包括这个题目其实。不是前端的题目,他也可以做成C语言啊,C语言Java的这样的一个算法面试题,还有Python对吧?诶,那实际上都要用这个类似的方法做,那这个时候大家就是说可以自己去啊,比如说纽扣网啊,对吧?诶比如说领扣的啊,领扣啊上面去找一些呃,适当的算法题目利用站的对吧?哎,然后你就可以去巧妙的去把这个题给进行一个。
40:04
解决啊,进行一个解答,然后呃,老师会觉得这个是对你的一个个人成长意义很大的,然后并且最好玩的是什么呢?就是我们马上啊,咱们去讲这个抽象语法数的时候,因为抽象语法数我们会带着大家去写对吧,带着大家去写抽象语法数,那么抽象语法数的实现就要利用到这个占这个算法啊,抽象语法数呢,就要去利用到这个站这个算法啊,所以说后边你会在复杂更复杂的一个情况下,你这个时候你就会发现这个算法的优良之处,对吧?诶这结合这两个站,然后咱们的输出语句呢,也把站的情况给你显示出来了。啊,也把它显示出来了啊好,那这节课咱们讲了40分钟,咱们真的是很用心的再给你讲解,希望你们能够理解老师,然后多多的书写几遍啊。
我来说两句