合理利用正则表达式搞定算法题
合理利用正则表达式搞定算法题
下面是网易的21年的笔试题,比较简单的两个。
1:给定两个字符串 s和 t ,判断 s是否为 t 的子序列。
你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度n ~= 500,000),而 s 是个短字符串(长度 <=100)。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
进阶:时间复杂度O(n),空间复杂度O(n)。
(function(){function solution(s, t){let sl = s.length, tl = t.length, L = 0, R = 0;while (L < sl && R < tl) {if(s[L] === t[R]){L++;R++;if (L === sl) { // 子串匹配完成return true;}}else {R++;}}return false;}let s = readline().trim(),t = readline().trim();print(solution(s.split(''), t.split('')))
})()
考虑到匹配子串,应该考虑正则是否可行。
如果将子串转换为正则,去匹配原串,则可以很方便得出答案。
正则表达式解法:
(function(){function solution(s, t){// 形如 /a[a-z]*b[a-z]*c/let reg = new RegExp(s.join('[a-z]*'));return reg.test(t);}let s = readline().trim(),t = readline().trim();print(solution(s.split(''), t))
})()
正则text()方法也是 O(N)的。
2:选座最大距离问题
疫情逐步缓和后,电影院终于开业了,但是由于当前仍处于疫情期间,应尽量保持人群不聚集的原则。
所以当小易来电影院选定一排后,尽量需要选择一个远离人群的位置。
已知由0和1组成的数组表示当前排的座位情况,其中1表示已被选座,0表示空座
请问小易所选座位和最近人的距离座位数最大是多少?
有如下假设:至少有一个人已选座,至少有一个空座位。
(function(){function solution(arr){let L = 0, max = 0, len = 0, border=0;while (L < arr.length) {if(arr[L] === '0') {len++;if(L === arr.length-1){ // 右边界border = len > border ? len : border;}}else {if(L-len === 0){ // 左边界border = len;}else {max = len > max ? len : max;}len = 0;}L++;}return Math.max( border, (max+1) >> 1);}let str = readline().trim();print(solution(str.split(' ')))})()
因为只有 0和1,可以考虑正则方式将1去掉,留下单独的0构成的数组。
也可以使用数组的split()拆分方法。
split拆分法:
function solution2 (arr) {let list = arr.join('').split('1');let max = Math.max(list[0].length, list[list.length-1].length);for (let i = 1; i < list.length-1; i++ ) {max = Math.max((list[i].length+1) >> 1, max)}return max;
}
总结:
正则表达式功能太强大了,具体的细则也是耐人寻味。要想在算法中合理利用它还需要大量的实践和经验。
合理利用正则表达式搞定算法题相关推荐
- python画圆形螺旋线_硬核教程,利用 Python 搞定精美网络图!
硬核教程, 利用 Python 搞定精美网络图! 一.NetworkX 概述 NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进 ...
- 《300分钟搞定算法面试》学习笔记
之所以不在CSDN直接发,怕说广告直接封了,但是分享还是要说明出处的,感觉老师讲的很好 资料请加群 : 891555732 <300分钟搞定算法面试>学习笔记(一) ------ 常用数据 ...
- 最短时间搞定算法:字节跳动Android岗算法题考前突击宝典
前言 一个人,一支笔,一个晚上,一个奇迹.这是学生党的常规操作. 大学里也同样有很多奇迹的创造者:每次一到期末考试的前几个晚上,各个变身"最强大脑",上知天文,下晓地理,还精通人文 ...
- 在plsql里面怎么去掉空行_利用Word搞定
1.一键去除页眉横线 woc!这个页眉神TM烦,加上后就怎么也去不掉!无论是按Backspace键还是按Delete键,就是删不掉! 操作方法:双击选择页眉,同时按住「Ctrl+Shift+N」,页眉 ...
- 备战数学建模国赛,快速搞定算法模型!
全世界只有3.14 % 的人关注了 青少年数学之旅 说到数学建模,大家的第一反应就是国赛.美赛等数学建模比赛,但这只是冰山一角,不过这个反应却也很正常,因为很多小伙伴接触数学建模的契机,大部分还是因为 ...
- 【Python基础】利用 Python 搞定精美网络图!
作者:叶庭云 编辑:Lemon 出品:Python数据之道 一.NetworkX 概述 NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复 ...
- python画圆形螺旋线_【Python基础】利用 Python 搞定精美网络图!
作者:叶庭云 编辑:Lemon 出品:Python数据之道 一.NetworkX 概述NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复杂 ...
- 【搞定算法】蓄水池算法
1.问题描述分析 采样问题经常会被遇到,比如: 1.从 100000 份调查报告中抽取 1000 份进行统计: 2.从一本很厚的电话簿中抽取 1000 人进行姓氏统计: 3.从 Google 搜索 & ...
- 利用Python搞定女朋友的小情绪~
- 点击上方"视学算法"订阅我吧!- 注:此项目仅供娱乐练习,女朋友还是要认真用心的交往哦~ 01 简介 脱单狗福利!每天不同时间段给女友定时给女友发消息,不错过早上起 ...
最新文章
- 我在学python-你们以为我在学C++?其实我在学 Python
- xcode7 没有Empty Application
- python实时定位_selenium python 一些操作和定位收集
- Web服务器漏洞和安全
- oracle允许空行,oracle用户权限的一些基本操作
- 博弈-sg函数的原理和优化(hdu-1536)
- java动态代理模式初解
- python入门-零基础 Python 入门
- 腾讯云配置Ubuntu使用SSH登录
- 大数据营销案例沃尔玛_实现大数据营销的方式有哪些
- 实现QQ主界面效果[图]
- Python CookBook第二章 字符串和文本
- 一年外包经验入职字节啦
- springboot+flyway使用
- Oracle 12c以下版本RAC与Redhat Linux的avahi-daemon服务的水火不容
- php消息撤回,QQ怎么在撤回消息后面加字?QQ消息撤回修改内容
- 基于jsp酒店管理系统设计
- 两种方法解决口算练习题
- v880+ 手机锂电池充电的正确方法
- 联想卡在logo界面_[联想电脑卡在载入界面有什么解决方法]联想电脑卡在logo界面...
热门文章
- 字幕文件 WebVTT 与 srt 之间的互相转化
- 观成科技亮相BCS2021 | 发布重磅新产品:瞰影-加密业务监控分析系统(ENA)
- php curdate(),PHP mysql数据库中的YEAR()与CURDATE()函数
- Socket网络程序设计(4) ———— 实现linux和windows的文件传输
- 你的生命,我曾经如此焦灼过
- 期望、方差、协方差和协方差矩阵
- Python Crash Course读书笔记 - 第16章:DOWNLOADING DATA
- C 语言 https(SSL)客户端简单实现
- 1052 Linked List Sorting 分数 25
- 协同过滤推荐算法和基于内容推荐算法的区别?