合理利用正则表达式搞定算法题
下面是网易的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;
}

总结:
正则表达式功能太强大了,具体的细则也是耐人寻味。要想在算法中合理利用它还需要大量的实践和经验。

合理利用正则表达式搞定算法题相关推荐

  1. python画圆形螺旋线_硬核教程,利用 Python 搞定精美网络图!

    硬核教程, 利用 Python 搞定精美网络图! 一.NetworkX 概述 NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进 ...

  2. 《300分钟搞定算法面试》学习笔记

    之所以不在CSDN直接发,怕说广告直接封了,但是分享还是要说明出处的,感觉老师讲的很好 资料请加群 : 891555732 <300分钟搞定算法面试>学习笔记(一) ------ 常用数据 ...

  3. 最短时间搞定算法:字节跳动Android岗算法题考前突击宝典

    前言 一个人,一支笔,一个晚上,一个奇迹.这是学生党的常规操作. 大学里也同样有很多奇迹的创造者:每次一到期末考试的前几个晚上,各个变身"最强大脑",上知天文,下晓地理,还精通人文 ...

  4. 在plsql里面怎么去掉空行_利用Word搞定

    1.一键去除页眉横线 woc!这个页眉神TM烦,加上后就怎么也去不掉!无论是按Backspace键还是按Delete键,就是删不掉! 操作方法:双击选择页眉,同时按住「Ctrl+Shift+N」,页眉 ...

  5. 备战数学建模国赛,快速搞定算法模型!

    全世界只有3.14 % 的人关注了 青少年数学之旅 说到数学建模,大家的第一反应就是国赛.美赛等数学建模比赛,但这只是冰山一角,不过这个反应却也很正常,因为很多小伙伴接触数学建模的契机,大部分还是因为 ...

  6. 【Python基础】利用 Python 搞定精美网络图!

    作者:叶庭云     编辑:Lemon      出品:Python数据之道 一.NetworkX 概述 NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复 ...

  7. python画圆形螺旋线_【Python基础】利用 Python 搞定精美网络图!

    作者:叶庭云     编辑:Lemon      出品:Python数据之道 一.NetworkX 概述NetworkX 是一个用 Python 语言开发的图论与复杂网络建模工具,内置了常用的图与复杂 ...

  8. 【搞定算法】蓄水池算法

    1.问题描述分析 采样问题经常会被遇到,比如: 1.从 100000 份调查报告中抽取 1000 份进行统计: 2.从一本很厚的电话簿中抽取 1000 人进行姓氏统计: 3.从 Google 搜索 & ...

  9. 利用Python搞定女朋友的小情绪~

    - 点击上方"视学算法"订阅我吧!- 注:此项目仅供娱乐练习,女朋友还是要认真用心的交往哦~    01 简介    脱单狗福利!每天不同时间段给女友定时给女友发消息,不错过早上起 ...

最新文章

  1. 我在学python-你们以为我在学C++?其实我在学 Python
  2. xcode7 没有Empty Application
  3. python实时定位_selenium python 一些操作和定位收集
  4. Web服务器漏洞和安全
  5. oracle允许空行,oracle用户权限的一些基本操作
  6. 博弈-sg函数的原理和优化(hdu-1536)
  7. java动态代理模式初解
  8. python入门-零基础 Python 入门
  9. 腾讯云配置Ubuntu使用SSH登录
  10. 大数据营销案例沃尔玛_实现大数据营销的方式有哪些
  11. 实现QQ主界面效果[图]
  12. Python CookBook第二章 字符串和文本
  13. 一年外包经验入职字节啦
  14. springboot+flyway使用
  15. Oracle 12c以下版本RAC与Redhat Linux的avahi-daemon服务的水火不容
  16. php消息撤回,QQ怎么在撤回消息后面加字?QQ消息撤回修改内容
  17. 基于jsp酒店管理系统设计
  18. 两种方法解决口算练习题
  19. v880+ 手机锂电池充电的正确方法
  20. 联想卡在logo界面_[联想电脑卡在载入界面有什么解决方法]联想电脑卡在logo界面...

热门文章

  1. 字幕文件 WebVTT 与 srt 之间的互相转化
  2. 观成科技亮相BCS2021 | 发布重磅新产品:瞰影-加密业务监控分析系统(ENA)
  3. php curdate(),PHP mysql数据库中的YEAR()与CURDATE()函数
  4. Socket网络程序设计(4) ———— 实现linux和windows的文件传输
  5. 你的生命,我曾经如此焦灼过
  6. 期望、方差、协方差和协方差矩阵
  7. Python Crash Course读书笔记 - 第16章:DOWNLOADING DATA
  8. C 语言 https(SSL)客户端简单实现
  9. 1052 Linked List Sorting 分数 25
  10. 协同过滤推荐算法和基于内容推荐算法的区别?