每日力扣-神奇字符串

90 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。

题目(已做删减处理)

神奇字符串 s 仅由 '1' 和 '2' 组成,串联字符串中 '1' 和 '2' 的连续出现次数可以生成该字符串。s 的前几个元素是 s = "1221121221221121122……" 。如果将 s 中连续的若干 1 和 2 进行分组,可以得到 "1 22 11 2 1 22 1 22 11 2 11 22 ......" 。

分析

从题目中我们可以得到神奇字符串要满足的条件:一个是只有1和2,另外一个是连续出现的次数可以生成该字符串。

我们可以初始化一个字符串tmp,用指针来指向需要构造的对应的数组的大小。用另外一个指针来指向现在需要构造的对应数组的位置。因为相邻数组间的数字肯定不会相同。那么我们就可以通过第二个指针的前一个位置来判断当前需要输入的数组数字。这样就保证了构造过程中的一定成立。

依次不断进行构造,直到字符串长度达到s,就是我们希望得到的答案。

总结

一道比较困难的算法题目。虽然你可能直到需要用到双指针的知识点,但是因为题目里面需要考虑的细节太多,能够AC 是很不容易的。我也是看了题解后,才明白其中的一些细节部分。尤其是初始化字符串的小细节。

如果你是刚学习算法的同学,我建议不需要浪费太多时间在这道算法题目上。

解题证明

image.png