字符串函数

三步学通KMP

痴心易碎 提交于 2020-02-24 03:16:02
前言 谈到字符串模式匹配算法,莫过于最经典的KMP算法,它由D.E.Knuth,J.H.Morris和V.R.Pratt三位大牛于1977年联合发表提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法),KMP算法可以在O(n+m)的时间复杂度以内完成字符串的匹配操作,其核心思想在于:当一趟匹配过程中出现字符不匹配时,不需要回溯主串的指针,而是利用已经得到的“部分匹配”,将模式串尽可能多地向右“滑动”一段距离,然后继续比较。 说到KMP,也得需要提一下字符串的模式匹配的意义,这也是我们学习KMP及各种字符串匹配算法的意义。字符串的模式匹配是对字符串的基本操作之一,广泛应用于生物信息学、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测等领域,如何简化其复杂性一直是算法研究中的经典问题。字符串的模式匹配实质上就是寻找模式串T是否在主串S 中,及其出现的位置。由于对字符串匹配的效率要求越来越高, 所以需要不断地改良模式匹配算法,减少其时间复杂度。 说到KMP,也感觉到数学世界的美妙,我们的祖先早在2000多年前就用阴阳(0,1)虚拟的分割了这个世界,而西方近代却用0、1(阴阳)在计算机里虚拟合成了这个世界;还有数学里的那些很奇怪而有趣的问题,比如杨辉三角, Kaprekar 常数,“421陷阱”等,不知道是不是与它们最终都能转化为0、1(阴阳)有关。好了,言归正传

JavaScript基础语法

喜夏-厌秋 提交于 2020-02-23 19:11:12
【使用JS的三种方式】 1、在html标签中,直接使用JS(并不提倡使用): 栗子:<button onclick="alert('我好啊')">点本宝宝</button> 不符合内容与行为分离的要求! 2、在html页面中使用<script></script>包裹JS代码: 栗子:<script type="text/javascript"> JS代码; </script> script标签可以放到页面的任何位置。 3、引入外部的JS文件 <script language="JavaScript" src="JS/01.js" ></script> 【注意事项】 1、<script></script>可以嵌入页面的任意位置。但是,位置的不同会导致JS代码的执行顺序不同; 比如:<script></script>放到<body></body>前面,则JS代码会在页面加载之前执行。 2、引入外部的JS,<script></script>必须是成对出现的标签。而且,标签中不能有任何JS代码。 JS中多行注释。ctrl+shift+/ JS中单行注释。ctrl+/ 【JS中变量】 1、JS中变量申明的写法: var num=1;//使用var申明的变量,属于局部变量,只在当前作用域有效; num=1;//不用var申明的变量,默认为全局变量,在整个JS文件中有效。 var x=1,y=2

ES6语法

六眼飞鱼酱① 提交于 2020-02-23 17:37:05
ES6语法 let 和 const 关键字 我们以前都是使用 var 关键字来声明变量的 在 ES6 的时候,多了两个关键字 let 和 const ,也是用来声明变量的 只不过和 var 有一些区别 1. let 和 const 不允许重复声明变量 // 使用 var 的时候重复声明变量是没问题的,只不过就是后的会把前面覆盖掉 var num = 100 var num = 200 2、let和const声明的变量不会进行声明提升。(通过let声明变量,之前的区域,叫做暂时性死区) 3、let和const声明的变量会被所有的代码块限制作用域(作用域更小),只要遇到大括号就形成作用域。 let num; alert(num); //undefined const num2 = 20; alert(num2); // 使用const 重复声明变量的时候就会报错 const num = 100 const num = 200 // 这里就会报错了 ii. let 和 const 声明的变量不会在预解析的时候解析(也就是没有变量提 升) alert(num); const num = 10; alert(num);` iii. let 和 const 声明的变量会被所有代码块限制作用范围 // var 声明的变量只有函数能限制其作用域,其他的不能限制 if (true) { var

SAS数据清洗之字符和数字处理

孤街醉人 提交于 2020-02-23 16:02:21
SAS数据清洗: 由于SAS数据集之间的关系一般不会用到,只是在proc sql中有所涉及,至今尚未运用过用于数据分析,所以在这里只讲单个数据集的处理。 在proc sql中我们可以看到:在定义数据集时涉及到字段名,字段属性,字段标签这三个最常用。我们在数据清洗时涉及到的数据集字段的处理,主要也就是围绕着字段名、字段属性和字段标签来进行处理。(对数据集结构的处理也就是对字段的增删改) 修改数据集名称和标签(label) 增加字段很简单,只需要在data步新建一个变量,对变量进行赋值即可。 删除变量可以使用drop和keep二者二选一。 下面谈一下最复杂的修改字段: 修改字段名最简单复杂的方法可以利用增加字段和删除字段二者结合。然后就是用sas中的rename关键字进行处理,格式为rename=(原字段名=新字段名)。 修改字段的标签:(定义label attrib label 变量名=label名) 修改使用modify 数据集名;label 变量名=label名。其中modify可以用于修改rename format和label。 修改sas的数据类型。 在sas中只有两种数据类型:数值型和字符型。日期在sas中存储形式是数值型,只是在显示时使用日期的format显示。 所以主要就是涉及到数值型和字符型之间的转换 数值转换为字符: data; x=2557898; y=put(x

bytectf2019 boring_code的知识学习&&无参数函数执行&&上海市大学生CTF_boring_code+

◇◆丶佛笑我妖孽 提交于 2020-02-23 10:54:54
参赛感悟 第三次还是第二次参加这种CTF大赛了,感悟和学习也是蛮多的,越发感觉跟大佬的差距明显,但是还是要努力啊,都大三了,也希望出点成绩。比赛中一道WEB都没做出来,唯一有点思路的只有EZCMS,通过哈希扩展攻击,进入admin。但是对于Phar的反序列化让我无所适从,找不到任何的利用点,干看着似乎有反序列化的利用点,却一头雾水。还是学习的太少,boring_code这道题的bypass方法也受益颇多。 boring_code 题目: <?php function is_valid_url($url) { if (filter_var($url, FILTER_VALIDATE_URL)) { if (preg_match('/data:\/\//i', $url)) { return false; } return true; } return false; } if (isset($_POST['url'])){ $url = $_POST['url']; if (is_valid_url($url)) { $r = parse_url($url); if (preg_match('/baidu\.com$/', $r['host'])) { $code = file_get_contents($url); if (';' === preg_replace('/[a-z]+\

Python字符串的修改以及传参

♀尐吖头ヾ 提交于 2020-02-23 07:42:09
前两天去面试web developer,面试官提出一个问题,用JavaScript或者Python实现字符串反转,我选择了Python,然后写出了代码(错误的): 1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 __author__ = 'ZhangHe' 4 def reverse(s): 5 l = 0 6 r = len(s) - 1 7 while l < r: 8 s[l],s[r] = s[r],s[l] 9 l += 1 10 r -= 1 11 return s 然后面试官问了两个问题: (1)可以这样修改字符串的值吗?【我回答的,可以】【回答错误】 (2)传入的参数是地址?还是副本?【我回答的,传值。数字,字符串,元组传值(immutable);list和dict传引用(mutable);】【回答传值,可以直接修改】【回答错误,正确的是传值,immutable】 虽然经常使用字符串,但是还真没有研究过这个问题,于是上网搜了一下资料: Python中的字符串是 不可变类型 ,就是说改变一个字符串的元素需要新建一个新的字符串。 字符串是由独立的字符组成的,也是一种序列,序列的通用操作方法也适用于字符串。例如: 通过切片操作顺序地访问子串; 通过len()求字符串的长度等; 通过in或not

sql server日期时间转字符串

不问归期 提交于 2020-02-23 03:46:32
一、 sql server日期时间函数 Sql Server中的日期与时间函数 1 . 当前系统日期、时间 select getdate () 2 . dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上2天 select dateadd ( day , 2 , ' 2004-10-15 ' ) -- 返回:2004-10-17 00:00:00.000 3 . datediff 返回跨两个指定日期的日期和时间边界数。 select datediff ( day , ' 2004-09-01 ' , ' 2004-09-18 ' ) -- 返回:17 4 . datepart 返回代表指定日期的指定日期部分的整数。 select DATEPART ( month , ' 2004-10-15 ' ) -- 返回 10 5 . datename 返回代表指定日期的指定日期部分的字符串 select datename (weekday, ' 2004-10-15 ' ) -- 返回:星期五 6 . day (), month (), year () -- 可以与datepart对照一下 select 当前日期 = convert ( varchar ( 10 ), getdate (), 120 ) ,当前时间 = convert (

sql server日期时间转字符串

微笑、不失礼 提交于 2020-02-23 03:40:27
一、 sql server日期时间函数 Sql Server中的日期与时间函数 1 . 当前系统日期、时间 select getdate () 2 . dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上2天 select dateadd ( day , 2 , ' 2004-10-15 ' ) -- 返回:2004-10-17 00:00:00.000 3 . datediff 返回跨两个指定日期的日期和时间边界数。 select datediff ( day , ' 2004-09-01 ' , ' 2004-09-18 ' ) -- 返回:17 4 . datepart 返回代表指定日期的指定日期部分的整数。 select DATEPART ( month , ' 2004-10-15 ' ) -- 返回 10 5 . datename 返回代表指定日期的指定日期部分的字符串 select datename (weekday, ' 2004-10-15 ' ) -- 返回:星期五 6 . day (), month (), year () -- 可以与datepart对照一下 select 当前日期 = convert ( varchar ( 10 ), getdate (), 120 ) ,当前时间 = convert (

js正则表达式

醉酒当歌 提交于 2020-02-23 01:51:30
正则表达式 正则表达式,又称规则表达式。 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 正则表达式通常用来检索、替换那些符合某个规则的文本。 正则表达式的作用: 1.灵活性、逻辑性和功能性非常的强 2.可以迅速地用极简单的方式达到字符串的复杂控制 3.对于刚接触的人来说,比较晦涩难懂 一:常见正则表达式 元字符 \d : 匹配任意一个数字,0~9 中的任意一个。 \s : 匹配任意一个空白字符。 \b : 匹配一个单词边界,不匹配任何字符。 \w : 匹配任意一个字符( 字母、 数字、下划线 )。 . : 匹配任意一个字符,除了换行符( \n )。 \n : 查找换行符。 \u : 通常用来匹配汉字。 表达式 “\d”,"\s","\b","\w",对应的大写字母表示相反的意义。 如:\D 匹配所有的非数字字符(反选)。 方括号 [abc] : 查找方括号之间的任何一个字符。 [^abc] : 查找任何不在方括号之间的字符(反选)。 [0-9] : 查找任何从 0 至 9 的数字。 [a-z] : 查找任何从小写 a 到小写 z 的字符。 [A-Z] : 查找任何从大写 A 到大写 Z的字符。 量词 n+ : 匹配任何包含至少一个 n 的字符串。{1,} n?

JS判断字符串格式是否合法

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-22 22:56:36
/** * 浏览器脚本函数列表 * boolean isNumber(numStr) :判断字符串是否是数值格式 * boolean isValidString(szStr) :判断字符串中是否含有非法字符"'\"><" * boolean isBlank(szStr) :判断字符串是否为空字符串(或不包含除空格外的其他字符) * String trim(szStr) :去掉字符串两端的空格 * boolean isDateStr(ds) :判断字符串是否为合法的日期格式:YYYY-MM-DD HH:MM:SS * 或 YYYY-MM-DD 或 HH:MM:SS * boolean isDatePart(dateStr) :判断字符串是否为合法的日期格式:YYYY-MM-DD * boolean isTimePart(dateStr) :判断字符串是否为合法的时间格式:HH:MM:SS * boolean chk_email(emailAddress) :判断邮件地址格式是否合法 */ /*********************************************************************** * 判断一个字符串是否是数值格式 */ function isNumber(numStr){ return !isNaN(numStr); } /****