今天是元旦,开篇先祝福大家在新的一年心想事成,工作顺利,开心生活每一天

看到【英雄会】上出现了微软出的题目:几个bing,题目内容如下:

本届大赛由微软必应词典冠名,必应词典(Bing Dictionary)是微软推出的新一代英语学习引擎,里面收录了很多我们常见的单词,详情请见:http://cn.bing.com/dict/?form=BDVSP4&mkt=zh-CN&setlang=ZH。但现实生活中,我们也经常能看到一些毫无规则的字符串,导致词典无法正常收录,不过,我们是否可以从无规则的字符串中提取出正规的单词呢?

例如有一个字符串"iinbinbing",截取不同位置的字符‘b’、‘i’、‘n’、‘g’组合成单词"bing"。若从1开始计数的话,则‘b’ ‘i’ ‘n’ ‘g’这4个字母出现的位置分别为(4,5,6,10) (4,5,9,10),(4,8,9,10)和(7,8,9,10),故总共可以组合成4个单词”bing“。

咱们的问题是:现给定任意字符串,只包含小写‘b’ ‘i’ ‘n’ ‘g’这4种字母,请问一共能组合成多少个单词bing?

字符串长度不超过10000,由于结果可能比较大,请输出对10^9 + 7取余数之后的结果。

最初的想法:分别记录四个字符出现的位置编号,通过后者字符编号大于前者字符编号条件,循环遍历得到符合条件的次数,但该算法的时间复杂度O(n4),实现绝对可以实现,但肯定行不通,改变策略。

分析:通过题面分析可知,是从字符串中取‘b’、‘i’、‘n’、‘g’四个字符进行排列组合,重新生成字符串”bing”的过程。但注意的是组合在一块的序列是有一定规律的,序号是逐渐递增的【(4,5,6,10) (4,5,9,10),(4,8,9,10)和(7,8,9,10)】,这就提供了一个先决条件:后者字符必须在前者字符存在的情况下进行计数和组合。算法复杂度为O(n).

做法:分别记录b、bi、bin、bing生成的排列次数,后者次数=前者基础次数+后者自身次数(例如:bi次数=b次数+bi自身次数)

以字符串"iinbinbing"为例,对字符串中字符进行遍历:

① 分别用四个计数器来记录组合

b

bi

bin

bing

0

0

0

0

② 当遍历’i’时,b的计数为0,在没有b存在的基础上,bing是不可能出现的

b

bi

bin

bing

0

0

0

0

③ 当遍历’i’时,b的计数为0,在没有b存在的基础上,bing是不可能出现的

b

bi

bin

bing

0

0

0

0

④ 当遍历’b’时,bing是以b开始的,则b计数为1:

b

bi

bin

bing

1

0

0

0

⑤ 当遍历’i’时,b的计数为1,在有b存在的基础上,bi是可以出现的,则bi计数为1(b计数+bi当前计数):

b

bi

bin

bing

1

1

0

0

⑥ 当遍历’n’时,i的计数为1,在有bi存在的基础上,bin是可以出现的,则bin计数为1(bi计数+bin计数):

b

bi

bin

bing

1

1

1

0

⑦ 当遍历’b’时,则b计数为2:

b

bi

bin

bing

2

1

1

0

⑧ 当遍历’i’时,b的计数为2,在有b存在的基础上,bi可能出现的次数为3(b计数+bi当前计数):

b

bi

bin

bing

2

3

1

0

⑨ 当遍历’n’时,i的计数为2,在有bi存在的基础上,bi可能出现的次数为4(bi计数+bin当前计数):

b

bi

bin

bing

2

3

4

0

⑩ 当遍历’g’时,在有bin存在的基础上,bing可能出现的次数为4(bin计数+bing当前计数):

b

bi

bin

bing

2

3

4

4

这样就得到了bing字符串的组合方式有4种了,代码实现如下:

using System;

public class Test
{
public static int howmany(string s)
{
int bCount = ;
int biCount = ;
int binCount = ;
int bingCount = ; for (int index = , length = s.Length; index < length; index++)
{
switch (s[index])
{
case 'b': bCount = ++bCount % ;
break;
case 'i': biCount = biCount % + bCount;
break;
case 'n': binCount = binCount % + biCount;
break;
case 'g': bingCount = bingCount % + binCount;
break;
}
}
return bingCount % ;
} //start 提示:自动阅卷起始唯一标识,请勿删除或增加。
public static void Main()
{
Console.WriteLine(howmany("iinbinbing "));
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
}

【英雄会】微软题目:几个bing的更多相关文章

  1. 【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps

    [Silverlight]Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps 上个月微软必应地图(Bing Maps) ...

  2. SDAccel-FPGA将带来至多25倍单位功耗性能提升

    很久没有看FPGA了,本来想继续学习HLS,就上Xilinx的网站看了看.结果发现了SDx 开发环境,很新的一个东西.由于我对这方面了解不多,本篇博文仅仅只是资料的整合和介绍. 1.SDx开发环境 X ...

  3. 一个开源的,跨平台的.NET机器学习框架ML.NET

    微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...

  4. .NET Core 添加Java 服务引用(WebService) 曲折历程(二)

    简介: 以为添加完插件后获取内容会一帆风顺,认真你就错了...,安装之后异步结果各种Error错误,获取不到任何信息. 在这里给大家个建议,查资料还是要用微软必应:https://cn.bing.co ...

  5. 开源的,跨平台的.NET机器学习框架ML.NET

    微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...

  6. .NET Conf 2019 大会上发布.NET Core 3.0

    北京时间今天凌晨如期在.NET Conf 上发布.NET Core 3.0,Keynotes 由Scott Hunter 主演,主要围绕.NET Core 3.0的新特性和社区展开. 多功能性是.Ne ...

  7. 微软必应·英雄会第三届在线编程大赛:几个bing?

    发布公司:微软亚太研发集团 有 效 期:2013-12-31至2014-02-01 难 度 等 级: 答 题 时 长:120分钟 编程语言要求:C C++ Java C# 悬赏详情 一等奖 : 价值2 ...

  8. 算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing

    基础知识的回顾不再写到这里面了,会写一些算法算法的解答或者读一些相关书籍的笔记. 今天做了一道算法题,来自微软必应·英雄会第三届在线编程大赛:几个bing? 做出来了...但不知道为啥执行测试用例失败 ...

  9. 一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享,邀你来“找茬儿”

    6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为题目的英文描述难以理解? ...

随机推荐

  1. Vue读书笔记:关于$ref、props和$emit

    1.props实现父组件向子组件传递数据 子组件可以通过props接收到来自父组件的数据,并且是单向绑定的.也就是说,数据不能从子组件反向传递. 2.$ref实现子组件向父组件通信 来自官方非常难理解 ...

  2. 洛谷P3358 最长k可重区间集问题(费用流)

    题目描述 对于给定的开区间集合 I 和正整数 k,计算开区间集合 I 的最长 k可重区间集的长度. 输入输出格式 输入格式: 的第 1 行有 2 个正整数 n和 k,分别表示开区间的个数和开区间的可重 ...

  3. T7314 yyy的巧克力(钟)

    题目描述 输入输出格式 输入格式: 如图 输出格式: 如图 输入输出样例 输入样例#1: 如图 输出样例#1: 如图 说明 如图 n*m-1 我们可以这样想,1*1的巧克力一定是由1*2的掰开的 #i ...

  4. SSH三个主流框架环境的搭建

    part 1  Hibernate环境的搭建 part2  struts2环境的搭建 第一步:从struts2官网下载需要的各种资料和jar包 第二步:在ecplise里面创建web项目,然后在web ...

  5. ajax返回值

    前端: <html> <head> <meta name="viewport" content="width=device-width&qu ...

  6. POJ 1458 Common Subsequence 【最长公共子序列】

    解题思路:先注意到序列和串的区别,序列不需要连续,而串是需要连续的,先由样例abcfbc         abfcab画一个表格分析,用dp[i][j]储存当比较到s1[i],s2[j]时最长公共子序 ...

  7. iOS UIImage的解码时机

    在看博客 UITableView优化技巧 时想到列表的优化主要还是对图片的优化处理. 博文中介绍了按需加载.快速滑动时不加载.异步刷新等等技巧. 这里有个问题, 当我们实例化一个UIImage对象并为 ...

  8. Ubuntu14.0 + CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0

    在安装好nvidia驱动的基础上安装 CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0 这三个是匹配的版本 别的匹配(CUDA8.0 + cudnn6.0 + Tens ...

  9. es6——map-set与对象对比

    {    //map,set,object对比    let item={t:1};    let map=new Map();    let set=new Set();    let obj={} ...

  10. NOIP2016 天天爱跑步 (树上差分+dfs)

    题目大意:给你一颗树,树上每个点都有一个观察员,他们仅会在 w[i] 时刻出现,观察正在跑步的玩家 一共有m个玩家,他们分别从节点 s[i] 同时出发,以每秒跑一条边的速度,沿着到 t[i] 的唯一路 ...