您好、欢迎来到现金彩票网!
当前位置:老k棋牌 > 栈字母表 >

lintcode九章算法——Google面试题:原子计数

发布时间:2019-06-27 05:55 来源:未知 编辑:admin

  。原子元素始终以大写字母开始,然后是零个或多个小写字母,代表名称。如果个数大于1,则可以跟随1个或多个代表该元素的个数。如果个数为1,则不会有数字。

  例如,存在H2O和H2O2,但是不存在H1O2。两个式子连接在一起产生另一个式子。例如,H2O2He3Mg4也是一个式子。式子可以放在括号内,并可为整个带括号的式子添加个数。 例如,(H2O2)和(H2O2)3是合理的。

  给定一个分子式,将所有元素的个数输出为以下形式的字符串:第一个原子名称(按排序顺序),后面是计数(如果该计数大于1);然后是第二个原子名称(按排序顺序 ),然后计数(如果该计数大于1),依此类推……

  这道题目稍许复杂,感觉像是在操作一段复杂的字符串,但细想之下其实整个过程并不繁琐。接下来给出三种方法,这三种方法本质相同,但实现方法上存在差异,第一种采用递归,而后两种采用栈式结构。

  方法一:首先编写一个解析器Parse,这个解析器应当能统计出从当前字符串位置开始,直到遇到一个右括号“)”或读到字符串末尾,然后连带上右括号“)”后面可能跟上的数字,这可做为一段整体。用一个counter来记录这一段各个元素的个数。最后返回counter。

  2.在解析器循环中:当遇到左括号“(”时,就递归调用Parse;并把Parse子程序中元素统计结果加入当前的counter当中。如果不遇到左括号,那么会发现一定是大写字母,也就是一个原子名称的开头,那么就统计这个元素的个数。

  3.循环结束后,检查右括号后面是否跟有数字,如果有的话要对当前的counter进行相应倍乘。

  方法二:和第一种方法类似,思想相同,但是写法上有差异。不采用递归函数,采用栈来进行操作。(其实函数的递归和栈本就具有极大的相似性)。

  这时,先初始化counter栈,然后仍旧需要一层循环,直到读完所有字符。循环中:当遇到左括号“(”时一层新的counter入栈。遇到右括号“)”时栈顶counter弹出,并检查后面是否跟有数字,如果有的话对当前counter进行相应倍乘,并把结果累计到新露出的栈顶。遇到大写字母,就统计这个元素的个数,计入counter,类似方法一。

  方法三:同方法二,但是不手动解析字符串,而是采用正则表达式(又称规则表达式Regular Expression,通常被用来检索、替换那些符合某个模式的文本),把字符串分成一个一个独立的块,这里采用的表达式为:”([A-Z][a-z])(\d)(()())(\d*)”。这里面的块分别表示:可能带有数字的元素如“Fe3”、“H”等;左括号“(”;可能带有数字的右括号“)”、“)3”等。然后在循环中对正则表达式中的每块进行各自对应的处理。

  复杂度分析:以上无论哪种方法,理论的复杂度相同。但是这里推荐使用第三种方法,一者栈式结构比递归的写法更加简洁;二者正则表达式极大地简化匹配操作。时间复杂度为O(N^2),这里N为字符串的长度,遍历一遍字符串需要O(N)的时间,但是当遇到左括号时,会对子式的元素向外累加,这就有可能达到O(N)的时间,而总字符串长度为O(N),所以左括号的个数为O(N)(注意大O记号的含义是“不超过”,这里的意思是不超过线性界,而不是等于线性界)。故所花时间为O(N^2),这里给出一种时间比较逼近N^2的表达式:A(B(C(D(E(F3)4)5)6)7)。

  注意:正则表达式的时间界不容易判断,这里正则表达式没有回溯,所以总的时间复杂度不会超过O(N^2),这与正则表达式的实现方法有关。

  空间复杂度为O(N),这里无论是栈还是Map,空间复杂度不会超过O(N)。

  本题是一道比较难的的题目,考察到了字符串的操作(实际上从形式语言与自动机的角度看,这是对于给定文法的一种特殊的解释执行),以及递归或者栈的灵活应用。如果能写出递归或者栈式结果,可以给出Hire;如果能了解并想到用正则表达式的方法,可以给出Strong Hire。

  题目描述给定一串数列,求出3个互相不覆盖的长度为k的子串,使其数字总和为最大值。输出的值为三个子串的起始下标。如果有多种解,输出字典序最小的一组样例:输入:[1,2,1,2,6,7,5,1],2输出:...博文来自:wjheha的博客

  题目描述:给定元素全为非负整数的非空数组nums,数组的度等于出现最多的元素的次数。找到具有和nums相同度的连续子串的最小长度。样例:ut:[1,2,2,3,1]Output:2解释:nu...博文来自:wjheha的博客

  如果让你来设计一个最基本的WebCrawler,该如何设计?需要考虑的因素有哪些?...博文来自:九章算法的博客

  13、字符串查找题目对于一个给定的source字符串和一个target字符串,你应该在source字符串中找出target字符串出现的第一个位置(从0开始)。如果不存在,则返回-1。样例如果sourc...博文来自:Dashuai_Liu的博客

  专栏九章算法网址珠链动态分割线题目描述**以字符串形式给出一个化学分子式,返回每个原子的计数。**原子元素始终以大写字母开始,然后是零个或多个小写字母...博文来自:weixin_34064653的博客

  九章算法提供LeetCode答案 前一段时间有一个非常有趣的故事(),MaxHowell(Homebrew的作...博文来自:湾区人工智能

  有n层的台阶,一开始你站在第0层,每次可以爬两层或者一层。请问爬到第n层有多少种不同的方法?...博文来自:九章算法的博客

  1题目描述a.给定一个无向图,这个图是在一棵树的基础上加上一条边构成的。问哪条边可以删掉使图重新变成一棵树?如果有多个答案那么输出输入的边中最后出现的那条。b.输入输出Input:[[1,2],[1,...博文来自:wjheha的博客

  给一个有向无环图,求出这个有向无环图的拓扑排序结果。博文来自:九章算法的博客

  你给出一个整数数组(size为n),其具有以下特点:博文来自:九章算法的博客

  九章算法面试题55旋转字符串九章算法面试题54带重复元素的全排列九章算法面试题53第一个出错的代码版本...博文来自:一地鸡毛

  433、岛屿的个数题目给一个01矩阵,求不同的岛屿的个数。0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。样例在矩阵:[[1,1,0,0,0],[0,1,0,0...博文来自:Dashuai_Liu的博客

  给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。样例插入区间[2,5] 到 [[1,2],[5,9]],...博文来自:观月执白

  面试题1落单的数题目描述:有2n+1个数,其中2n个数两两成对,1个数落单,找出这个数。要求O(n)的时间复杂度,O(1)的空间复杂度。进阶问题:如果有2n+2个数,其中有2个数落单,该怎么办?答:初...博文来自:一路前行的专栏

  1落单的数题目描述:有2n+1个数,其中2n个数两两成对,1个数落单,找出这个数。要求O(n)的时间复杂度,O(1)的空间复杂度。进阶问题:如果有2n+2个数,其中有2个数落单,该怎么办?分析初阶:将...博文来自:sunenglish1230的博客

  众所周知,多线程下计数存在着计数不正确的问题。这个问题的根源在于多个线程对同一个变量可以同时访问(修改)。这样就造成了修改后的结果不一致。        首先在这里先强调一点,volatile关键字并...博文来自:tangliguantou的专栏

  悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等...博文来自:kxj19980524的博客

  最近在做单位电子账户系统,为应对可能发生的恶意流量攻击,对暴露在外的注册和登录交易加入了流量控制,以提高系统的安全性。流量控制器的实现基于原子计数器AtomicInteger,这个类是线程安全的,在高...博文

  在多线程环境下要计数,需要保证:计数变量的一致性和线程安全才能保证多线程环境下计数正确。原子计数正是提供了此需求的功能,保证计数操作未执行完毕时绝不会被其他任何实务或事件打断,下面是原子计数器forp...博文来自:蔚蓝的天空Tom

  一:背景现在分布式已经在互联网中广泛流行了。除了分布式以外,很多系统对高并发也有比较高的要求。因此现在的系统会对一些请求限流。当然,限流可以使用redis原子计数器incr.但是除了限流以外,很多系统...博文来自:li12412414的博客

  记录找工作的过程中遇到的和看别人面经过程中看到的比较有意思的面试题。————————————————————————————————————————————一、排序1、快排 快排的基本思想是分治,每次...博文来自:少年锦时

  利用Zookeeper来实现分布式环境下的原子计数器和API每天调用次数限制项目主页 分布式环境下的原子计数器和API每天调用次数限制利用Zookeeper来实现分布式环境下的原子计数器和API每天调...博文

  一、前言在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试。这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流量...博文来自:wonderful_life_mrchi的博客

  为什么需要AtomicInteger原子操作类?对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的。num++解析为num=num+1,明显,这个操作不...博文来自:踏浪行的博客

  69. 二叉树的层次遍历给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例给一棵二叉树 {3,9,20,#,#,15,7} :3/\920/\157返回他的分层遍历结果:[[3],[9,2...博文来自:Shirven

  给一个包含正负整数的数组,要求对这个数组中的数进行重新排列,使得其正负交替出现。首先出现负数,然后是正数,然后是负数。有多余的数的一方,就放在末尾。如[1,2,3,-4]-[-4,1,2,3],[1...博文来自:九章算法的博客

  前言第三周我们计划刷关于矩阵的题目。此次参与刷题的共五人(嘟嘟、琼琼、东东、大智、博主)。首次把宿舍的白板用上了。。正题28.搜索二维矩阵每行都是有序的,且下一行第一个元素比上一行最后一个元素大。我们...博文来自:葡萄家

  问题:实现一个Memcpy函数函数简介:c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。本题主要考虑两...博文来自:Walk the horizon

  IAP升级功能编写初期的一些困惑与疑问---完成功能后的总结 一,网上下载的例程,跳转部分的代码有差异,尤其是用的汇编那句 二,关于跳转部分的代码的理解(转) 三,关于跳转时能否不用按键,用软件标志位...博文来自:Super_Demo的专栏

  现在的Win7系统中安装的一般都是32位的Office,因为微软推荐使用32位的Office,兼容性更强,稳定性更好。在使用Access作为数据库的时候,C#操作Access,如果Access是acc...博文来自:写代码的蜗牛

  转载请注明出处:     在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容。 公交信息检索     实际上,公交信息检索与POI检索、在线建议检索非常相似,也...

  Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread...

  u011860731的专栏C#实现开发windows服务实现自动从FTP服务器下载文件(自行设置分/时执行)

  最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能。首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer...

  摘要 最近要发论文了,被知乎里人推荐使用论文编译软件(CTex、LaTex和Overleaf之类),瞬间感觉自己用Word简直Out了(书读少)。 学校里也听说过LaTex,不过因为当时没怎么写过...

  看到很多朋友配置vsftpd时不能使用匿名用户上传和下载(创建目录或删除、重命名文件夹),本文主要解决vsftpd的匿名用户权限配制问题。...

  一个例子高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一...

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...

  我走小路的博客将Excel文件导入数据库(POI+Excel+MySQL+jsp页面导入)第一次优化

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...

  Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且...

  klkxxy的博客三菱FX系列PLC与PC通讯的实现之专有协议(计算机联接)的程序设计之一

  阅读内容为:FX系列微型可编程控制器用户手册(通讯篇)中计算机链接功能章节。 采用本方法通信,pc端的实现,其实就是,把操作按照协议(2种)翻译成相应的字符串,通过串口发送给plc。 编写一应用程...

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...

  u013268685的专栏(有一种幸福叫AC,有一种期待叫AK)简单linux字符设备驱动程序与编程小技巧(上)

  这几天开始研究linux下的驱动程序编写了,遇到的问题也挺多的,好在linux是开源的,很多高人编写的技巧和思路都会在他们的源代码中体现,我也在他们的源码中学到了很多好东西,我归纳了下贴出来,希望自己...

  苹果充值的刷单现象在游戏行业非常普遍,很多团队挖空心思寻找漏洞以非法获利。常见的手段主要有以下六种: 伪造充值凭据(receipt)以小额凭据骗取大额商品 凭据重复使用 凭据重复使用信用卡黑卡/...

  分享知识、分享进步jquery/js实现一个网页同时调用多个倒计时(最新的)

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...

  一、代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托...

  如下图所示,蜂窝小区,以1为中心,顺时针编号,编号最大限定为100000。求任意两编号之间的最短距离。两个相邻小区的距离为1 示例:19到30的最短距离为5 实现如下三个接口: /**********...

  NYS001的专栏魔兽争霸3冰封王座1.24e 多开联机补丁 信息发布与收集点

  在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ...

http://advntravel.com/zhanzimubiao/97.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有