last

LeetCode 58. Length of Last Word

≡放荡痞女 提交于 2020-01-28 15:43:22
58. Length of Last Word(最后一个单词的长度) 链接 https://leetcode-cn.com/problems/length-of-last-word 题目 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。 如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0 。 说明:一个单词是指仅由字母组成、不包含任何空格的 最大子字符串。 示例: 输入: "Hello World" 输出: 5 思路 字符串题,只要注意到几处细节就不难。 我是从最后一位开始的,若最后一位为空格,则提前,提前到非空处,之后再按位查找,直到找到空格或者到字符串的开头为止。在按位查找的过程中增加一个num用于计数,最后输出num即可。 代码 public static int lengthOfLastWord(String s) { if (s.length() < 1) { return 0; } int end = s.length() - 1; while (end >= 0 && s.charAt(end) == ' ') { end--; } if (end < 0) { return 0; } int num = 0; while (end >= 0 && s.charAt(end) != '

爬虫系列之第4章scrapy框架

柔情痞子 提交于 2020-01-28 04:58:17
一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。 整体架构大致如下: Components: 1、引擎(EGINE) 引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。有关详细信息,请参见上面的数据流部分。 2、调度器(SCHEDULER) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 3、下载器(DOWLOADER) 用于下载网页内容, 并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的 4、爬虫(SPIDERS) SPIDERS是开发人员自定义的类,用来解析responses,并且提取items

Jpa规范之hibernate的一对一关联查询操作学习

北城以北 提交于 2020-01-28 04:00:55
我们搭建一个maven项目,然后我们加载数据,数据我已经准备好了。 -- truncate all delete from jpa_test . oo_t_idcard where 1 = 1 ; delete from jpa_test . oo_t_person where 1 = 1 ; -- oo_t_person INSERT INTO jpa_test . oo_t_person ( id , created_by , created_date , last_modified_by , last_modified_date , hair_color , height , weight ) VALUES ( 1 , 4 , '2019-12-12 02:55:14.786000000' , 4 , '2019-12-12 02:55:14.786000000' , 'green' , 62.00 , 75.00 ) ; INSERT INTO jpa_test . oo_t_person ( id , created_by , created_date , last_modified_by , last_modified_date , hair_color , height , weight ) VALUES ( 2 , 4 , '2019-12-12 02:55:14

ac自动机

安稳与你 提交于 2020-01-28 03:46:28
https://www.cnblogs.com/sclbgw7/p/9875671.html 讲的好的博客。 只有fail指针的模板,好像用不到,一般都是用last指针的模板。 void build() { queue<int>q; q.push(1); while(!q.empty()) { int x=q.front();q.pop(); for(int i=0;i<26;++i) { int c=ch[x][i]; if(!c){ch[x][i]=ch[fail[x]][i];continue;}//关键,把子节点改成fail节点的子节点 q.push(c); int fa=fail[x]; while(fa&&!ch[fa][i])fa=fail[fa]; fail[c]=ch[fa][i]; } } } https://cn.vjudge.net/contest/301351#problem/A 习题 最基础的模板,即求一个文本串有多少个匹配的模式串。 #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 5e5 + 5; const int N = 1e6 + 5; int tree[maxn][27];

unittest 测试函数、测试类

别说谁变了你拦得住时间么 提交于 2020-01-27 22:07:44
针对单个函数的测试 1.要测试的函数 name_function.py 1 def get_formatted_name(first, last): 2 """接受名和姓并返回整洁的姓名""" 3 full_name = first + ' ' + last 4 return full_name.title() 5 6 #函数 get_formatted_name() 将名和姓合并成姓名,在名和姓之间加上一个空格,并将它们的首字母都大写,再返回结果。 2.编写测试用例 test_name_function.py 1 import unittest #导入 unittest 模块 2 from name_function import get_formatted_name #导入要测试的函数 3 4 class NamesTestCase(unittest.TestCase): #测试用例:创建一个继承 unittest.TestCase 的类,包含一系列针对 get_formatted_name 的单元测试 5 """ 测试 name_function.py""" 6 7 def test_first_last_name(self): #编写方法对函数的行为进行测试 8 """ 检查函数 get_formatted_name() 在给定名和姓时能否正确地工作 """ 9

CSS选择器

让人想犯罪 __ 提交于 2020-01-27 02:32:26
一、 基本选择器 选择器 含义 * 通用元素选择器,匹配任何元素 E 标签选择器,匹配所有使用 E 标签的元素 .info class 选择器,匹配所有 class 属性中包含 info 的元素 #footer id 选择器,匹配所有 id 属性等于 footer 的元素 实例: * { margin:0; padding:0; }p { font-size:2em; }.info { background:#ff0; }p.info { background:#ff0; }p.info.error { color:#900; font-weight:bold; }#info { background:#ff0; }p#info { background:#ff0; } 二、 多元素的组合选择器 选择器 含义 E,F 多元素选择器,同时匹配所有 E 元素或 F 元素, E 和 F 之间用逗号分隔 E F 后代元素选择器,匹配所有属于 E 元素后代的 F 元素, E 和 F 之间用空格分隔 E > F 子元素选择器,匹配所有 E 元素的子元素 F E + F 毗邻元素选择器,匹配所有紧随 E 元素之后的同级元素 F 实例: div p { color:#f00; }#nav li { display:inline; }#nav a { font-weight:bold; }div >

5、爬虫系列之scrapy框架

梦想的初衷 提交于 2020-01-26 23:55:19
一 scrapy框架简介 1 介绍 (1) 什么是Scrapy?   Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。 整体架构大致如下: ''' Components: 1、引擎(EGINE) 引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。有关详细信息,请参见上面的数据流部分。 2、调度器(SCHEDULER) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列,

快速掌握Zabbix配置的高效学习方法

隐身守侯 提交于 2020-01-26 20:32:14
本次博文主要以Zabbix的中文界面为主进行介绍! 一、模板的管理与使用 模板是Zabbix的核心,因为模板中集成了所有要监控的内容以及展示的图形等等,Zabbix的安装部署完成后,自带了很多模板(网络设备模板、操作系统模板、常见应用软件模板),这些模板可以满足我们80%左右的应用需要,所以一般情况下不需要我们单独创建模板了。 如图: 模板是由很多内置项目组成的,基本的内置项目有应用集、监控项、触发器、图形、聚合图形、自动发现、Web检测、链接的模板等这8个部分组成。在这8个部分中,监控项、触发器、图形、自动发现这4个部分是重点,也是难点。下面重点介绍这四个部分的具体实现过程。 在Zabbix自带的模板中,大部分都是可以直接拿来使用的,这里就不需要对每个模板都进行深入了解,只需要对常用的一些模板重点掌握就可以了。下面重点介绍下经常使用的三类模板,保证重点的学习。 1)常用的模板有以下三类: 1)监控系统状态的模板 Template OS Linux //对Linux系统的监控模板 Template OS Windows //对Windows系统的监控模板 Template OS Mac OS X //对Mac OS X系统的监控模板 Template VM VMware //对VM VMware系统的监控模板 2)监控网络和网络设备的模板 Template Module

线性表的简单应用

独自空忆成欢 提交于 2020-01-26 20:10:05
线性表 •线性表是我们最先接触,也是最简单的一种数据结构的表现方式。 •线性表分为顺序表和链表,也就是顺序存储结构和链式存储结构的两种表现形式。 1.顺序表   •顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 1.定义顺序表结构体: #define MAXN 100100typedef struct list { int data[MAXN]; //存储空间 int last; //当前最后一个元素的下标(last+1表示当前表的长度) int maxsize; //最大元素个数(表的最大长度) }squenlist; 2.初始化结构体 void init(squenlist *L,int maxsize) { L->last = -1; //将last赋值为-1为了方便访问数组下标 L->maxsize = maxsize; //获取表的最大长度 } 3.建表 定义了结构体并且初始化了之后,就要开始建表了,建立顺序表的过程可以简化为一个给数组赋值的过程 int

手把手教你搭建区块链(中)

≡放荡痞女 提交于 2020-01-26 12:00:01
​“学习区块链的最快方法就是自己亲手搭建一个” 本文接上篇: 手把手教你搭建区块链(上) “了解工作量证明” 工作量证明算法(PoW)是在区块链上创建或挖掘新区块的方式。 PoW的目标是发现可以解决问题的数字。从计算机的角度来讲,该数字必须既要很难找到又要易于验证。这是工作量证明的核心思想。 我们将看一个非常简单的示例来帮助您深入了解,某个整数x乘以另一个y的哈希必须以0结尾的函数表达为: hash(x * y)= ac23dc…0 对于这个示例,让我们设x = 5,则代码如下: from hashlib import sha256 x = 5 y = 0 # We don’t know what y should be yet… while sha256(f’{x*y}’.encode()).hexdigest()[-1] != “0”: y += 1 print(f’The solution is y = {y}’) 运行代码后的结果为y =21(产生的哈希以0结尾) hash(5 * 21) = 1253e9373e…5e3600155e860 在比特币中,工作量证明算法称为Hashcash。,与我们刚才运行的基本示例代码并没有太大不同。这就是矿工竞相创建新区块的算法。通常,难度由字符串中搜索的字符数决定。通过在transaction中获得btc,矿工获得了解题的奖励