单词

洛谷 P1308.统计单词数

ぃ、小莉子 提交于 2020-02-11 18:24:13
洛谷 P1308.统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。 输入格式 共2行。 第1行为一个字符串,其中只含字母,表示给定单词; 第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。 输出格式 一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数−1。 输入输出样例 输入样例#1 To to be or not to be is a question 输出样例#1 2 0 输入样例#2 to Did the Ottoman Empire lose its power at that time 输出样例#2 -1 说明/提示 数据范围 1≤单词长度≤10。 1≤文章长度≤1,000,000。

小白提问:提取单词的程序哪里打错了

末鹿安然 提交于 2020-02-11 14:31:15
我这几天才刚刚学了python,准备从网上找个程序提取单词 我照着百度打的 文章原文链接: python编程从文章中提取英文单词 报错截图 import re list_wenzhang = [ ] text = "" a = open ( "01.txt" , "r" ) list_wenzhang = a . readlines ( ) hang_shu = len ( list_wenzhang ) j = 0 for j in range ( hang_shu ) : text = text + list_wenzhang [ j ] list_danci = ( re . findall ( "[a-zA-Z]+" , text ) def text_save ( filename , data ) : file = open ( filename , "a" ) for i in range ( len ( data ) ) : s = str ( data [ i ] ) . replace ( "[" , "" ) , replace ( "]" , "" ) s = s . replace ( " " , "" ) #去除空格 file . write ( s ) file . close ( ) print ( "保存文件成功" ) text_save (

字典树存在的意义

喜你入骨 提交于 2020-02-10 08:22:01
1. 字典树   曾经遇到这样一个问题:很多单词,这些单词只含小写字母,并且不会有重复的单词出现,现在要统计出以某个字符串为前缀的单词数量,单词本身也是自己的前缀。先看看用常规的方法解决这个问题的复杂度。假设单词表容量为M,需要统计的前缀数量为N,前缀的平均长度是L,则常规算法思路是:对于每个前缀搜索每个单词,看看这个前缀是不是这个单词的前缀,如果是数量+1。这样的话时间复杂度为O(N*M*L),如果N相当大的话,这个算法的复杂度将无法接受啦。其实这就是字典树的典型应用啦。   我们先学习一下字典树,在解决上面的问题。字典树又称trie树,从名字上看很显然是一种树形结构了。字典树有以下几个特点:1.利用串的公共前缀,节约内存;2.根结点不包含任何字母;3.其余结点仅包含一个字母;4.每个结点的子节点包含字母不同。看看一个例子吧:下面就是一个字典树(图片来自百度百科)    上面的树就是一颗典型的字典树了,字典树中存储的单词包括:abc、abcd、abd、b、bcd、efg、hig,即:所有标记为红心的才是单词的结尾字母。对比上面的trie树的特点仔细看一下,理解一下到底什么是字典树。实际上字典树包括常见的两种种操作是:查找和插入操作。我觉得有必要看看字典树的基础代码:( 代码 ) View Code 1 //字典树的每个节点 2 struct node 3 { 4 bool

数组空间不够的解决方法

北城以北 提交于 2020-02-09 03:18:07
1、利用指针 2、静态的数组空间大小不能超过64k 3、设置动态数组, 4、设置全局数组 例题 7-32 说反话-加强版 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。 输出格式: 每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。 输入样例: Hello World Here I Come 输出样例: Come I Here World Hello 要设置的数组超过64k 扩展: 1、解决输出格式空格问题 2、分裂函数(会破坏之前的函数) char *strtok(char s[], const char *delim); delim是指针,故用strtok(s," "),即是字符串,而不是字符 # include <stdio.h> # include <string.h> int main ( ) { char s [ 50001 ] ; char * str [ 250001 ] ; char * p ; int count = 0 , i = 0 , j = 0 ; gets ( s ) ; p = strtok ( s , " " ) ; /

P1019 单词接龙

倖福魔咒の 提交于 2020-02-08 22:07:44
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beastbeast b e a s t和 astonishastonish a s t o n i s h,如果接成一条龙则变为 beastonishbeastonish b e a s t o n i s h,另外相邻的两部分不能存在包含关系,例如 atat a t 和 atideatide a t i d e 间不能相连。 嗯... 嗯嗯... 嗯嗯嗯... 挠头苦想一下午没改出来却被c老一语道破天机的我感觉自己好tm**啊... 哎,算了算了 反正硕大一个天七就我两年都爆零了呸我啥也没说 来好好捋一捋这道题算了 学过搜索的都知道,这道题就是dfs,简简单单的dfs 因为只有20个单词,所以不需要任何优化 先判断能不能接上,能接上就dfs下去,然后每次更新龙的长度 但为什莫我没做出来呢? 先上代码吧: #include<bits/stdc++.h> using namespace std; string a[10000];//单词 int use[10000];//判断用的次数 int num;//单词的个数 int maxn=-2;//储存龙的长度 int

Java 基础数据与运算

こ雲淡風輕ζ 提交于 2020-02-08 18:32:57
基础数据与运算 关键字和标识符 关键字:被赋予了特殊含义的字符,如class,public,void,if等等; 首先我们注意到这些关键字一般来说都是小写的,而且它们也是相当于一些特定的称谓,不能运用在其他的地方,或者不能去改变它们的含义。 标识符:这是我们自定义的一些名称,目的是为了增强我们代码的可读性,当然定义标识符的时候也存在组成规则的: (1)由字母、数字、下换线、美元符组成;ps:数字不能作为开头使用; (2)还有就是要严格的区分大小写,大小写不同表示的含义就会有所不同; (3)不能使用关键字和Java自带的类名称作为标识符来使用; 注意:为了增强代码的可读性,应起有意义的单词作为其标识符。 标识符的组成规范(t规范与规则是有所不同的): (1)小驼峰式命名法:如果一个标识符是由多个单词组成的一个词,那么除了第一个单词首字母小写外,其他单词首字母大写 ,如:myName等,主要应用于变量名、函数名; (2)大驼峰式命名法:如果一个标识符是由多个单词组成的,那么所有单词的首字母大写,如:MyName,主要应用于类、接口; (3)全大写命名法:如果一个标识符是由多个单词组成的,那么每一个单词都要大写,单词与单词之间用_连接;如MAX_VALUE DEFAULT_SIZE,主要应用于定义常量。 注释 注释:注释的存在也是为了更好的读懂代码,这其中有单行注释、多行注释、文档注释

leetcode151.翻转字符串里的单词

爷,独闯天下 提交于 2020-02-08 13:54:56
给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 示例 3: 输入: "a good example" 输出: "example good a" 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 说明: 无空格字符构成一个单词。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 进阶: 请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。 1 class Solution { 2 public: 3 void reverseChar(string& s, int start, int end) 4 { 5 char tmp; 6 while(start < end) { 7 tmp = s[start]; 8 s[start] = s[end]; 9 s[end] = tmp; 10 start++; 11 end--; 12 } 13 } 14 15 void deleteSpace

洛谷P3966 [TJOI2013]单词 题解

随声附和 提交于 2020-02-07 08:16:00
题目链接 分析: 对 n n n 个字符串跑一边AC自动机,建立fail树(即由fail指针组成的树),每个点的点权为在Trie树上经过这个点的字符串的数量。则每个点所代表的的字符串在所有单词中出现次数显然为这个点在fail树上的子树的点权和,跑一遍树形DP,记录一下每个单词的位置输出即可。 具体看代码 Code: # include <iostream> # include <cstdio> # include <cstring> using namespace std ; const int maxn = 220 , maxm = 1e6 + 50 ; int n , cnt , l , r , a [ maxn ] , f [ maxm ] , nxt [ maxm ] , t [ maxm ] [ 26 ] , q [ maxm ] ; char s [ maxm ] ; void insert ( char * s , int x ) { int now = 0 , len = strlen ( s ) ; for ( int i = 0 ; i < len ; i ++ ) { if ( ! t [ now ] [ s [ i ] - 'a' ] ) t [ now ] [ s [ i ] - 'a' ] = ++ cnt ; now = t [ now ] [ s [

Java命名规范

℡╲_俬逩灬. 提交于 2020-02-07 02:33:07
今天上课老师提问,一时想不起来了,记录一下 三个规则,两个标准和一个注意事项 1、三个规则 不能以数字开头 不能使用Java中的关键字 严格区分大小写 2、两个标准 见名知意: 看到名字能知道它是用来干什么的 驼峰原则: 类名:单词首字母大写 方法:第一个单词首字母小写,剩下的单词首字母大写 变量:如果只有一个单词,全部小写,如果多个单词,第一个单词首字母小写,别的单词首字母大写 两个标准不是必须遵守的,但是建议按照这个标准来 3、注意事项 Java采用的是Unicode字符集,也就是所有Unicode支持的字符都可以在Java中使用,但是不建议随意使用,建议Java命名使用英文书写,并且遵循三个规则和两个标准 来源: CSDN 作者: 三木成森. 链接: https://blog.csdn.net/Asdzxc968/article/details/104193254