前言
A=B语言也较为特殊,可以认为整体是个循环体,但是是每次循环只要能够执行一条命令就去执行,然后就重新回到循环开头
这个性质会在后续不断应用
而且其本质在做的就是字符串替换
1.1 A到B
1 | a=b |
1.2 大写
1 | a=A |
1.3 去重
思路
显然我们最后要保留的状态是没有连续字母
只需要将重复的几个压成一个就行,不过要注意A=B这个语言的特殊性
代码
1 | aa=a |
1.4 去重 2
思路
同理,这个是把连续的a压没,
这里之所以会有aaa,而不是直接aa=是因为假如只压缩的可能会剩下来:例如aaa会被替换成a
,我们这么做的本质是将多的字母先压成两个,再把这两个消除掉
1 | aaa=aa |
1.5 排序
思路
研究语言的必经之路,排序,注意到我们现在在做的是替换字符串
我们的目的是希望各个字母都在其应该在的位置,但我们不知道数组下标,怎么样能达成这两个条件呢?
我们需要一个只看相邻的排序算法,也就是冒泡算法,实现起来不难,如下
代码
看到了吗,本质就是大的向后挪动,这个在单步运行时候看的更清楚
1 | ba=ab |
这个排序在之后会常用到的,当我们只关心字母数量之类的而不关心其位置的时候
1.6 比较
思路
比较a和b的多少,还记得去重怎么做的吗?把两个相同的数摁在一起消除
这个题也一样,我们把两个不同的字母摁在一起消除,剩下的就是多的字母
值得一提的是压字母存在两个情况
代码
1 | ab= |