abc-defg

Lyndon分解学习笔记

若如初见. 提交于 2020-10-04 22:27:47
1.一些定义 Lyndon Word :对于任意字符串 \(s\) 如果对任意后缀 \(S\) ,有$ S>s$,那么称 \(s\) 为 Lyndon Word 。 举个例子: \(\texttt{abcdefg}\) 是 Lyndon Word,而 \(\texttt{gfedcba}\) 不是。 定义 \(\mathbb L\) 表示 Lyndon Word 构成的集合。 Lyndon 分解 :对于任意字符串 \(s\) ,如果存在一组字符串 \(w_1,w_2,\cdots,w_k\) ,满足: \(w_1w_2\cdots w_k=s\) ; \(\forall i,w_i\) 是 Lyndon Word; \(w_1\ge w_2\ge w_3\cdots w_k\) ; 则称 \(\{w_i|1\le i\le k\}\) 为 \(s\) 的 Lyndon 分解 ,并记 \(\text{CFL}(s)=\{w_i|1\le i\le k\}\) 。 2.一些性质 (以下定理证明可以康 zght's blog ) 若 \(a,b\in \mathbb L\) ,且 \(a<b\) ,则 \(ab\in \mathbb L\) 。 Lyndon 分解存在且唯一。 \(w_1\) 是最长的 Lyndon 前缀, \(w_k\) 是最长的 Lyndon 后缀。 \(s\)

PHP实战之字符串函数解读

风流意气都作罢 提交于 2020-08-19 03:23:11
目录 1.前言 2.字符串出现位置 2.1 strstr() : 区分大小写 查找第一次出现的位置 2.2 stristr():不区分大小写 查找第一次出现的位置 2.3 strpos():是否包含 2.4 explode():分割字符串 2.5 substr ():指定位置判断指定字符串 2.6 substr_count() : 统计子字符串出现次数 3.替换字符串 3.1 str_replace(): 区分大小写 替换字符 3.2 substr_replace() :兼容中文替换字符 4. 总结 1.前言 在项目开发过程中,出现了bug,就是封装SQL语句产生了多余的字符串,当想根据字符串查询然后删除的时候,发现关于字符串的函数有点忘记了.下面来回顾一下。 2.字符串出现位置 2.1 strstr():区分大小写查找第一次出现的位置 strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。 该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。 <?php $email = 'user@example.com'; $domain = strstr($email, '@'); echo $domain; // prints @example.com ?> 2.2 stristr():不区分大小写查找第一次出现的位置 stristr()

c++指针概念回顾

吃可爱长大的小学妹 提交于 2020-08-17 16:02:23
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧: [cpp] view plain copy int p; //这是一个普通的整型变量 int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针 int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组 int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级比*高,所以P 是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组 int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合

微信公众号请求验证加密比对

不想你离开。 提交于 2020-08-17 13:51:36
import org.apache.commons.lang3.StringUtils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; /** * @ProjectName: WxTest * @Author: huat * @Date: 2020/6/18 10:49 * @Version: 1.0 */ public class WxService { //此处token的值需要和公众号填写的token值一致 private static final String TOKEN = "abcdefg" ; /** * 验证请求是否来自微信 * @param timestamp * @param nonce * @param echostr * @return */ public static boolean check(String timestamp,String nonce,String echostr){ /** * 验证签名步骤 * 1 )将 token 、 timestamp 、 nonce 三个参数进行字典序排序 * 2 )将三个参数字符串拼接成一个字符串进行 sha1 加密 * 3

最长回文子串 and 最长回文子序列(转)

白昼怎懂夜的黑 提交于 2020-08-17 04:29:04
一、概念 1、回文(palindrome) 回文就是正读和反读都一样的字符串,如aba,abba,abcba等。 2、字符子串和字符子序列的区别 (1)字符字串指的是字符串中连续的n个字符,如abcdefg中,ab,cde,fg等都属于它的字串。 (2)字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的部分字符,但不可改变其前后顺序。如abcdefg中,acdg,bdf属于它的子序列,而bac,dbfg则不是,因为它们与字符串的字符顺序不一致。再如cabbeaf,删掉‘c’、'e'、' f '后剩下的子串“abba”就是回文字符串,也是其中最长的回文子序列。 (3)最长回文子串必须是连续的,而最长回文子序列不一定连续,但不可改变先后顺序。 二、最长回文子序列 and 最长回文子串 (一)最长回文子序列 LPS(Longest Palindromic Subsequence) 方法一:递归方法 str[0...n-1]是给定的字符串序列,长度为n,假设lps(0,n-1)表示序列str[0...n-1]的最长回文子序列的长度。 1.如果str的最后一个元素和第一个元素是相同的,则有:lps(0,n-1)=lps(1,n-2)+2;例如字符串序列“AABACACBA”,第一个元素和最后一个元素相同,其中lps(1,n-2)表示红色部分的最长回文子序列的长度

三十道JS常见程序题(三)

人走茶凉 提交于 2020-08-17 03:06:20
21、写出程序运行的结果? for(i=0, j=0; i<10, j<6; i++, j++){ k = i + j;} 结果:10 22、阅读以下代码,请分析出结果: var arr = new Array(1 ,3 ,5); arr[4]='z'; arr2 = arr.reverse(); arr3 = arr.concat(arr2); alert(arr3); 弹出提示对话框:z,,5,3,1,z,,5,3,1 23、截取字符串 abcdefg 的 efg alert('abcdefg'.substring(4)); 24、判断一个字符串中出现次数最多的字符,统计这个次数 答:var str = 'asdfssaaasasasasaa'; var json = {}; for (var i = 0; i < str.length; i++) { if(!json[str.charAt(i)]){ json[str.charAt(i)] = 1; }else{ json[str.charAt(i)]++; } }; var iMax = 0; var iIndex = ''; for(var i in json){ if( json[i]>iMax){ iMax = json[i]; iIndex = i; } } alert('出现次数最多的是:'+iIndex+'出现

【无私分享:ASP.NET CORE 项目实战(第十一章)】Asp.net Core 缓存 MemoryCache 和 Redis

孤街醉人 提交于 2020-08-14 10:29:36
原文: 【无私分享:ASP.NET CORE 项目实战(第十一章)】Asp.net Core 缓存 MemoryCache 和 Redis 目录索引   【无私分享:ASP.NET CORE 项目实战】目录索引 简介       经过 N 久反复的尝试,翻阅了网上无数的资料,GitHub上下载了十几个源码参考 , Memory 和 Redis 终于写出一个 简陋 的 封装,为了统一和易用,我们两种缓存都统一实现了一个接口 ICacheService,微软也有很多是通过IDistributedCache,大家可以参考 https://docs.asp.net/en/latest/performance/caching/distributed.html ,GitHub上也有很多很好的封装,这里我们就不一一介绍了,大家自行参考,现在搞 Asp.net Core的还是不是很多,中文的资料也少的可怜,而且基本都是千篇一律照搬,对于只认识 ABCDEFG的我来说,过程是十分艰辛的,一篇文章往往要看四五遍,逐行逐句翻译,说多了都是泪,不说了,我们开始。 期间,得到了很多朋友的帮助,在此表示感谢!    缓存接口 ICacheService    缓存也好,数据库也好,我们就是进行CRUD操作,接口没什么好解释的,注释我写的很明白,这里就列给大家:    # 验证缓存项是否存在 1 ///

SQL之 Stuff和For xml path

喜夏-厌秋 提交于 2020-08-13 00:05:29
示例 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 BBB 企业4 BBB 企业5 我想把这个表变成如下格式: 类别 名称 AAA 企业1,企业2,企业3 BBB 企业4,企业5 一开始挺头疼的(会了的肯定没有这种感觉,不会那必须是头疼啊(*^__^*) ),从网上找了点资料,算是找到一种比较简单方便的方法吧,现在大体总结一下,供大家共同学习。 原先的表名为Table_A,实现代码如下: select 类别, 名称 = ( stuff( (select ',' + 名称 from Table_A where 类别 = A.类别 for xml path('')), 1, 1, '' ) ) from Table_A as A group by 类别 这里使用了SQL Server 2005版本以后加入的stuff以及for xml path,先说下在上面这句sql中的作用,然后再详细的说明一下这两个的用法。 for xml path('') 这句是把得到的内容以XML的形式显示。 stuff((select ',' + ep_name from ep_detail where ep_classes = a.ep

open CV对图像的各类操作

﹥>﹥吖頭↗ 提交于 2020-08-11 06:05:24
本文章用于记录自己使用open CV过程中的要点,便于遗忘时查看。 首先使用 using namespace std; using namespace cv; 避免每次都需要敲 ::cv及::std; 图像的读写显示存取 图像定义: Mat image; 图像读取: imread(const String & filename,int flags = IMREAD_COLOR); 支持格式有: Windows bitmaps - *.bmp, *.dib (always supported) JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section) JPEG 2000 files - *.jp2 (see the Notes section) Portable Network Graphics - *.png (see the Notes section) WebP - *.webp (see the Notes section) Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported) Sun rasters - *.sr, *.ras (always supported) TIFF files - *.tiff, *.tif

JavaScript学习笔记-03数据类型

筅森魡賤 提交于 2020-08-11 06:02:52
【那什么,用软件记笔记更方便查看,blog略麻烦,更适合分享技术吧。。】 JavaScript 是一种弱类型或者说动态语言,不用提前声明变量的类型,程序运行过程中,类型会被自动确定。 var age = 9; // 这是一个数字型 var isGreat = 'Yes'; // 这是一个字符串 相同的变量可用作不同的类型: var n = 9; // n 为数字 var n = "Aney"; // n 为字符串 JS 把数据类型分为两类: 简单数据类型 ( Number, String, Boolean, Undefined, Null); 复杂数据类型 ( object)。 1. 数字类型Number JavaScript 数字类型既可以用来保存整数值,也可以保存小数(浮点数)。 var age = 9; // 整数 var grade = 149.5; // 小数 JS中八进制前面加0,十六进制前面加 0x。 // 1.八进制数字序列范围: 0~7 var num2 = 023; // 对应十进制的19 var num3 = 010; // 对应十进制的8 // 2.十六进制数字序列范围: 0~9以及A~F var num = 0xA; // 对应十六进制的10 JavaScript中数值的最大和最小值。 console.log(Number.MAX_VALUE); // 1