.玩转字符串--stringr包 1.1 字符串长度-引号内的单个字母/数字/符号数量 x <- "The birch canoe slid on the smooth planks." x str_length...#提取x中第5和第9位的字符串 str_sub(x,5,9) 1.4 字符检测 str_detect(x2,"h") # 第一个参数为向量名,第二个是检测的关键词 str_starts(x2,"T")...#判断x2中T开头的字符串,输出逻辑向量 str_ends(x2,"e") #判断x2中e结尾的字符串,输出逻辑向量 1.5 字符串替换 x2 str_replace(x2,"o","A") #每个元素里面只替换第一次出现的目标字符...### library(dplyr) i = rnorm(10) case_when(i>0 ~ "+", i<0 ~ "-", T ~ "0") ★★★★★长脚本的管理方式...ggplot2对行名并不友好,通常要使样本名转化为data.frame中的第一列,防止在后续代码运行过程中行名丢失 图片 图片 step2 把原来的行名转变为第一列 图片 step3 宽变长 :test
复习R包stringr字符串操作的几个函数-长度、拆分、提取、字符检测、替换和删除。...2.2.2 组织方式二(小洁老师现在使用方式):拆分1个项目为多个子项目(道理类似于脚本拆分子脚本),每个子项目为1个文件夹,每个文件夹一个Rproject; load("../1_data-pre(工作目录的隔壁文件夹...2.3 if条件语句控制代码运行elseif(F){}啥都不敢if(F){}elese{}#运行else后的{}中的代码2.4 ifelse函数只有3个参数ifelse(x,yes,no)x:逻辑或逻辑值向量...代码2实现结果和代码1相同2.6 练习library(dplyr)x = c(-1,-1,4,5,2,0)case_when(x>0 ~ "A", x==0 ~ "0",...跟多个条件的两句代码比较看哈!!
(一直都没记住大佬写的包总集到底是哪个,每次都把想起来的包名全加载一遍) 1.字符串处理函数 #准备工作 rm(list = ls()) if(!...;x 1.1 检测字符串长度 str_length(x) #注意包括空格,空格也算一个 #[1] 42 length(x) #算的是向量有多少个元素 #[1] 1 1.2 字符串拆分 str_split...birch" "canoe" "slid" "on" "the" "smooth" "planks." str_replace(x2,"o","A") #此时只有每个字符串的第一个...条件和循环,if,for 碎碎念:这个东西每次好久不用就想不起格式要重新查,脑子是个好东西,就是漏的厉害 rm(list=ls()) #if的格式 if (){ #if后面的括号里只能是一个逻辑值...(dplyr) i = 0 ifelse(i>0,"+",ifelse(i<0,"-","0")) case_when(i>0 ~ "+", i<0 ~ "-",
玩转字符串1.检测字符串长度str_length(x)length(x)# 字符的个数2.字符串拆分str_split(x," ") # 把42个字符 按照“空格”拆分成八个字符串class(str_split...(x2,"o","A") #如果向量里的一个数据有两个o,只替换第一个str_replace_all(x2,"o","A") #如果向量里的一个数据有两个o,都替换str_replace_all(x2...duplicated(mm)] 提取没有重复的第一次出现的mutate,数据框新增一列mutate(test, new = Sepal.Length * Sepal.Width) new是新产生的列名新加之后...else2, ifelse(,,ifelse)在ifelse里加一个ifelse补充 case_when练习题1.加载deg.Rdata,根据a、b两列的值,按照以下条件生成向量x:load("deg.Rdata...("douhua",1:100,".txt")file.create(f)file.remove(f)重要的函数多脚本的管理便于方面管理的文件夹save(赋值各个文件名,file = "xxxx.Rdata
示例1: 输入:“00110011” 输出:6 解释:有6个子串具有相同数量的连续1和0: “0011”,“01”,“1100”,“10”,“0011”,“01”。...示例2: 输入:“10101” 输出:4 解释:有4个子串,“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。...s 给的都是二进制数,要求计算具有相同数量 0 和 1 的非空(连续)子字符串的数量,这句话里面的条件有三个: 第一 不为空,非空(连续) 第二 0 和 1 是要相同数量的 第三 0 和 1 要是连续出现的子字符串的数量...满足条件为前面的数量大于等于后面的数量,即为pre>=cur时,我们计数满足条件加1的情况,定义计数为count,满足条件时,count++ // 计算前一个字符连续出现的次数 let pre = 0...即这些情况满足如下:计算前一个字符连续出现的次数大于等于计算后一个字符连续出现的次数,即为pre>=cur的条件下满足,计数情况count++,循环字符串后,返回我们需要的count计数。
5mm alpha = 0.5, # 透明度 50% shape = 8) # 点的形状 ##颜色:字符串,blue, red等; #2.2...iris_box_ggpubr.png") #3.eoffice包 导出为ppt,全部元素都是可编辑模式 library(eoffice) topptx(p,"iris_box_ggpubr.pptx") ###超多的点或行列的热图不适用...2、搜索画图代码 3、仿制示例数据 4、套代码,调整细节 玩转字符串 str_length() length()#向量里面元素的个数 str_split() str_sub(x,5,9)#提取5-9的元素...可用于向量取子集; str_replace(x,"o","a")#将x中的o替换为a,只替换出现的第一个o; str_replace(x,"o|s","a")#将x中的o或者s替换为a,只替换出现的第一个...#用之前需要加载stringr包或dplyr包,快捷键ctrl+shift+M 条件或循环 rm(list = ls()) ## 一.条件语句 ###1.if(){ } #### (1)只有if
示例1: 输入:"00110011" 输出:6 解释:有6个子串具有相同数量的连续1和0: “0011”,“01”,“1100”,“10”,“0011”,“01”。...示例2: 输入:“10101” 输出:4 解释:有4个子串,“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。...s 给的都是二进制数,要求计算具有相同数量 0 和 1 的非空(连续)子字符串的数量,这句话里面的条件有三个: 第一 不为空,非空(连续) 第二 0 和 1 是要相同数量的 第三 0 和 1 要是连续出现的子字符串的数量...满足条件为前面的数量大于等于后面的数量,即为pre>=cur时,我们计数满足条件加1的情况,定义计数为count,满足条件时,count++ // 计算前一个字符连续出现的次数 let pre = 0...即这些情况满足如下:计算前一个字符连续出现的次数大于等于计算后一个字符连续出现的次数,即为pre>=cur的条件下满足,计数情况count++,循环字符串后,返回我们需要的count计数。
,那么当要对比两个字符串的是,需要先判断哪一个字符串长度较长,那么就调用该字符串的contains(...)方法来判断另外一定字符串是否是其子串,如果满足条件,那么将这个子串放入到List<String...,依然是采用暴力破解的方式,但是与第一种不同的点是,从数组中第一个字符串开始,每次获取一个字符串,然后与其他字符串进行对比(即:除了自己),那么只要发现这个字符串是对方的子串了,那么就终止遍历,即可将这个子串加入到...首先,我们获取数组中的第一个字符串“leetcoder”,让它与其他字符串作比较,来判断“leetcoder”是否是对方的子串,那么遍历完其他字符串之后,发现,都不满足成为对方子串的条件,那么本次循环结束...那么第二个我们拿“leetcode”去与其他字符串做比较,当对比数组中第一个字符串“leetcoder”的时候,就满足了“leetcode”是“leetcoder”的判断条件,因为已经确定了”leetcode...第三个我们拿”od“与其他字符串做比较,它的结果与上面类似,都是在遍历第一个元素“leetcoder”就满足了od是其子串的条件,那么同样将od加入到result集合中,并结束本次循环。
示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。...示例 2 :输入: "10101"输出: 4解释: 有4个子串:“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。注意:s.length 在1到50,000之间。...)找符合条件的子串找到满足条件的子串,就保存结果参考视频:传送门for i=0;i=后一个数字出现的次数,则一定包含满足条件的子串。即cur小于等于pre则符合条件。
示例 1 : 输入: "00110011" 输出: 6 解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。...示例 2 : 输入: "10101" 输出: 4 解释: 有4个子串:“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。 注意: s.length 在1到50,000之间。...str.slice(i))找符合条件的子串 找到满足条件的子串,就保存结果 for i=0;i<str.length-1;i++ r=match(str.slice(i)) if r...,使用test方法与传入的字符串进行比对,返回第一个比对成功的字符串,保存到数组result中 以此类推,剃掉原字符串的第一个字符后再调用一次match方法,直到原字符串只剩下1个字符,返回数组result...前一个数字出现的次数>=后一个数字出现的次数,则一定包含满足条件的子串。即cur小于等于pre则符合条件。
示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。...示例 2 :输入: "10101"输出: 4解释: 有4个子串:“10”,“01”,“10”,“01”,它们具有相同数量的连续1和0。注意:s.length 在1到50,000之间。...(i))找符合条件的子串找到满足条件的子串,就保存结果for i=0;i=后一个数字出现的次数,则一定包含满足条件的子串。即cur小于等于pre则符合条件。
4 个字符串,然后判断分隔出的 4 个字符串是否满足 ip 某一段的要求,假如 4 个字符串都在 0 到 255 之间并且没有前导的零,那就是一个合法的 ip 地址。...比如 25525511135,先来确定 ip 的第一段,第一段最多有 3 种可能:2,25,255,这里可以使用一个小循环。假如先选择 2 做为 ip 的第一段,2 小于等于 255,满足要求。...接下来确定 ip 的第二段,也就是说对剩余的字符串 5525511135 重复上述操作,同样的,最多有 3 种可能:5,55,525。假如这里选择 5, 5 是小于等于 255 的,因此满足条件。...每一层的检索都是一个递归操作,递归的退出条件就是到第 5 层结束,第 5 层结束后如果没有剩余字符串,说明找到了一个正确的 IP 地址,保存到结果集里即可。...写代码时我们可以把多叉树的遍历骨架写出来: def backtrace(root :str) -> None: """ 有 3 个子节点的多叉树的中序遍历。
题目 给你一个只包含小写字母的字符串 s ,你需要找到 s 中最多数目的非空子字符串,满足如下条件: 这些字符串之间互不重叠,也就是说对于任意两个子字符串 s[i…j] 和 s[k…l] ,要么 j <...如果一个子字符串包含字符 char ,那么 s 中所有 char 字符都应该在这个子字符串中。 请你找到满足上述条件的最多子字符串数目。...示例 1: 输入:s = "adefaddaccc" 输出:["e","f","ccc"] 解释:下面为所有满足第二个条件的子字符串: [ "adefaddaccc" "adefadda",..."ef", "e", "f", "ccc", ] 如果我们选择第一个字符串,那么我们无法再选择其他任何字符串,所以答案为 1 。...同时我们可以发现,选择 "ef" 不是最优的,因为它可以被拆分成 2 个子字符串。 所以最优解是选择 ["e","f","ccc"] ,答案为 3 。 不存在别的相同数目子字符串解。
多叉树包括 B 树族,有 B 树、B+ 树、B* 树,比较适合用来做文件检索;另外一个是字典树,适合进行字符串的多模匹配。...详解二叉搜索树 二叉搜索树 如下图所示,二叉搜索树满足这样的条件,每个节点包含一个值,每个节点至多有两个子树。每个节点左子树节点的值都小于自身的值,每个节点右子树节点的值都大于自身的值。...第一步,要找到最小子问题的求解方法; 第二步,要找到合并子问题解的方法; 第三步,要找到递归终止条件。 动态规划法 动态规划法,与分治法类似,也是将问题分解为多个子问题。...使用动态规划的场景需要也满足三点条件: 子问题的求解必须是按顺序进行的; 相邻的子问题之间有关联关系; 最后一个子问题的解就是初始问题的解。...分支界定法 最后是分支界定法,与回溯法的求解目标不同。回溯法的求解目标是找出满足约束条件的所有解,而分支界定法的求解目标则是找出满足约束条件的一个解。
将近1.6G,900多万记录,16个字段。...(carrier,tailnum)] #但心里要清楚列索引接受的条件是含有列表的列表,而且这里的列表作为变量给出,而非data.frame时代的字符串向量。 行列同时索引毫无压力。...注意以上新建列时,如果只有一列,列名比较自由,写成字符串或者变量都可以,但是新建多列,必须严格按照左侧列名为字符串向量,右侧为列表的模式,当然你也可以使用第二种写法。...以上语法加入了新的参数.SDcols和.SD,咋一看摸不着头脑,其实是在按照carrier,origin,dest三个维度分组的基础上,对每个子块特定列进行均值运算。...SD, mean)则将各个子块的对应列应用于均值运算,并返回最终的列表。
题目 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, 问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置...本题的子串需要满足长度为m,字符不重复,可以使用长为m的滑动窗口遍历字符串,窗口内每个字符都要出现一次,如果符合条件,就返回窗口起始位置。...代码 /** * 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, * 能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面...* 顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3....,每次取目标数组大小进行比较,不符后再向后移动 if (checkSubStr(ch, s.substring(i, i + targetCharSize))) {
---- 串联所有单词的子串题解集合 暴力匹配版滑动窗口 用哈希优化暴力滑动 滑动距离优化+哈希优化 ---- 暴力匹配版滑动窗口 思路: 首先,最直接的思路,判断每个子串是否符合,符合就把下标保存起来...else { //每匹配完一个子串,就去对应的查找数组中删除已经找到的字符串 Words.erase(ret); leftNum--;//当前子串匹配,说明少了一个需要匹配的子串...第一类: 当子串完全匹配,移动到下一个子串的时候。 因为当前区间满足条件,那么下一次滑动区间就可以直接往右移动一个单词的长度。...并且看图,由于前面两个foo其实已经判断过了,是匹配的,因此我们可以直接从第三个foo的位置,即判断新加入的单词是否满足条件即可。...当前区间的bar单词出现了两次,而所给的words数组中只出现了一次,显然不满足条件,因此我们需要调整滑动区间位置直到当前区间每个元素出现的次数满足条件为止。
如果允许每个节点可以有更多的数据项和更多的子节点, 就是多叉树(multiway tree) 后面我们讲解的 2-3 树,2-3-4 树就是多叉树,多叉树通过重新组织节点,减少树的高度,能对二叉树进行优化...4 次 I/O 操作就可以读取到想要的元素, B 树(B+)广泛 应用于文件存储系统以及数据库系统中 2-3 树 2-3 树是最简单的 B 树结构, 具有如下特点: 2-3 树的所有叶子节点都在同一层...(只要是 B 树都满足这个条件) 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点....(演示一下构建 2-3 树的过程.) 插入规则: 2-3 树的所有叶子节点都在同一层.(只要是 B 树都满足这个条件) 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点....有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点 当按照规则插入一个数到某个节点时,不能满足上面三个要求,就需要拆,先向上拆,如果上层满,则拆本层, 拆后仍然需要满足上面 3 个条件。
思路: 看到第一个样例就不难想到其中一个构造方法是将排列 p 翻转后直接输出,将排列 p 反转后得到 p' ,将其带入 F 函数得到 不难看出排序后两个排列的 F 是相同的,故直接将排列 p 翻转输出即可...在这里插入图片描述 假设 s[ 1 : 4 ] 这个子串中满足 ' 0 ' 的数量等于 ' 1 ' 的数量,那么考虑与其相邻的前面的那个子串 s[ 0 : 3 ] ,因为 s[ 1 : 3 ] 这个子串是共用的...,如果 s[ 0 : 3 ] 也想满足这个约束的话,显然是需要让 s[ 0 ] = s[ 4 ] 才行,同理考虑与其相邻的后面的那个子串 s[ 2 : 5 ] ,也能得到 s[ 1 ] = s[ 5 ]...这个结论,推广一下,就能得出需要满足的第一个条件就是,对于任意一个位置 i 来说,需要满足 s[ i ] == s[ i + k ],在这个题目中的话,问号特判一下就可以了再仔细观察一下第一个条件的约束条件是...s[ i ] = s[ i + k ],这也就相当于对 k 取余的一个划分,到此为止再反观一下这个题目,不难发现 s 中所有长度为 k 的子串,其本质就是 k 的划分,所以我们在判断第一个条件的同时,
领取专属 10元无门槛券
手把手带您无忧上云