算法笔试模拟题精解之“2n合体”

简介: 关键在于理解题意,题中的含义是这样的,每次挑两对2n合并成m,然后判断有多少个子序列,之后再挑选不同的2n。所以示例中的答案是4种,而不是1种。

在线编程介绍

阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding

本文为大家介绍其中的第48题:2n合体,具体如下:

题目描述

等级:容易
知识点:数学
查看题目:2n合体

有一个只包含小写字母n和t的字符串s(1<=|s|<=1000000),其中如果有两个n相邻,那么它们可以合并成一个m,现在需要你去求这个字符串中,含有多少个'mtm'这样的子序列。

输入一行字符串s;

输出这个字符串中所包含的mtm子序列的个数。

示例1
输入:
"nnntnnn"
输出:
4

解题思路

两个位置容易出现理解问题。
1、子序列。子序列不要求一定是连续的。例如 abcdef的子序列可以是abc,也可以是ace。

2、含有多少个’mtm’这样的子序列。这里不是说先判断如何合并,然后在合并后的字符串上判断mtm子序列有多少个。

题中的含义是这样的(感觉题干确实没说清楚),每次挑两对2n合并成m,然后判断有多少个子序列,之后再挑选不同的2n。所以示例中的答案是4种,而不是1种。

有了上面的解释,理解题干就没有问题了。

求解思路:对于每一个t进行单独考虑,计算这个t的左侧和右侧分别可以合成出多少种不同的m,这两个数的乘积就是对于这个t来说的mtm子序列的个数。

因为只有相邻的n才可以合成m,所以t将原来的字符串分成了一系列n的串。

例如:nnntnnnntnntnnn
被分成了nnn nnnn nn nnn

没有段包含的m个数分别为2 3 1 2

对于每个t来说的mtm子序列就分别是2*(3+1+2) 、(2+3)*(1+2)、 (2+3+1)*2;所以结果为12+15+12 = 39

时间复杂度为O(2*n) 第一次遍历算出每一段m个数,第二次遍历求和;
空间复杂度O(n) 保存每一段m个数

看完之后是不是有了想法了呢,快来练练手吧>>查看题目:2n合体
720-150.png

相关文章
|
4月前
|
算法
电子好书发您分享《超全算法笔试 模拟题精解合集》
电子好书发您分享《超全算法笔试 模拟题精解合集》
26 3
|
4月前
|
算法
电子好书发您分享《超全算法笔试 模拟题精解合集》
电子好书发您分享《超全算法笔试 模拟题精解合集》
27 2
|
3月前
|
编解码 算法 前端开发
往年 | 大疆雷达算法校招笔试题目解析
往年 | 大疆雷达算法校招笔试题目解析
57 1
|
6月前
|
算法
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
35 0
|
11月前
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(下)
7大排序算法-- 堆排 快速排序 --精解(下)
56 0
|
11月前
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(上)
7大排序算法-- 堆排 快速排序 --精解
34 0
|
11月前
|
搜索推荐 算法
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
83 0
|
11月前
|
存储 搜索推荐
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(上)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解
61 0
|
11月前
|
算法 Serverless 测试技术
骚戴独家笔试---算法篇5
骚戴独家笔试---算法篇5
37 0
|
11月前
|
算法 网络协议
骚戴独家笔试---算法篇4
骚戴独家笔试---算法篇4
44 1