A=B 第一章题解

前言

A=B语言也较为特殊,可以认为整体是个循环体,但是是每次循环只要能够执行一条命令就去执行,然后就重新回到循环开头

这个性质会在后续不断应用

而且其本质在做的就是字符串替换

1.1 A到B

1
a=b

1.2 大写

1
2
3
a=A
b=B
c=C

1.3 去重

思路

显然我们最后要保留的状态是没有连续字母

只需要将重复的几个压成一个就行,不过要注意A=B这个语言的特殊性

代码

1
2
3
aa=a
bb=b
cc=c

1.4 去重 2

思路

同理,这个是把连续的a压没,

这里之所以会有aaa,而不是直接aa=是因为假如只压缩的可能会剩下来:例如aaa会被替换成a

,我们这么做的本质是将多的字母先压成两个,再把这两个消除掉

1
2
aaa=aa
aa=

1.5 排序

思路

研究语言的必经之路,排序,注意到我们现在在做的是替换字符串

我们的目的是希望各个字母都在其应该在的位置,但我们不知道数组下标,怎么样能达成这两个条件呢?

我们需要一个只看相邻的排序算法,也就是冒泡算法,实现起来不难,如下

代码

看到了吗,本质就是大的向后挪动,这个在单步运行时候看的更清楚

1
2
3
ba=ab
cb=bc
ca=ac

这个排序在之后会常用到的,当我们只关心字母数量之类的而不关心其位置的时候

1.6 比较

思路

比较a和b的多少,还记得去重怎么做的吗?把两个相同的数摁在一起消除

这个题也一样,我们把两个不同的字母摁在一起消除,剩下的就是多的字母

值得一提的是压字母存在两个情况

代码

1
2
3
4
ab=
ba=
aa=a
bb=b