字符

CSL 的字符串(思维+STL操作)

亡梦爱人 提交于 2020-03-29 03:34:34
链接: https://ac.nowcoder.com/acm/contest/551/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助。 给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件: 原字符串中出现的字符,新字符串也必须包含。 新字符串中所有的字符均不相同。 新字符串的字典序是满足上面两个条件的最小的字符串。 输入描述: 仅一行,有一个只含有可打印字符的字符串 s。 |s|≤105|s|≤105 输出描述: 在一行输出字典序最小的新字符串。 示例1 输入 复制 bab 输出 复制 ab 示例2 输入 复制 baca 输出 复制 bac 备注: ASCII字符集包含 94 个可打印字符(0x21 - 0x7E),不包含空格。 思路:我们开一个记录数量的容器和标记数组,然后对string进行操作,注意string的str.end()-1是最后一个元素,也可以用str.rbegin()代替,如果我们当前的字符容器的最后一个有大于要插入的,并且后面还有这个字符,那我们就把这个字符给舍弃, 并且把这个字符的标记给更新

19-字符串匹配(kmp || substr,find)

。_饼干妹妹 提交于 2020-03-29 02:57:33
链接: https://www.nowcoder.com/acm/contest/77/C 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一个字符串 让你找到这个字符串 S 里面的子串T 这个子串 T 必须满足即使这个串的前缀 也是这个 串的后缀 并且 在字符串中也出现过一次的(提示 要求满足前后缀的同时也要在字符串中出现一次 只是前后缀可不行 输出最长满足要求字符串) 输入描述: 给出一个字符串 长度 1 到 1e6 全部是小写字母 输出描述: 如果找的到就输出这个子串T 如果不行就输出 Just a legend 示例1 输入 fixprefixsuffix 输出 fix 示例2 输入 abcdabc 输出 Just a legend方法一:kmp:注意枚举的模式串,以及原串与给定字符之间的差别: #include <iostream> #include <cstring> #include <cstdio> using namespace std; string str, mo; int Next[1000005]; void getNext(){ Next[0] = -1; //一定要初始化 int i = 0, j = -1, len = mo

CSL的字符串

你。 提交于 2020-03-29 02:54:31
链接: https://ac.nowcoder.com/acm/contest/551/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助。 给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件: 原字符串中出现的字符,新字符串也必须包含。 新字符串中所有的字符均不相同。 新字符串的字典序是满足上面两个条件的最小的字符串。 输入描述: 仅一行,有一个只 含有可打印字符的字 符串 s。 | s | ≤ 10^ 5 输出描述: 在一行输出字典序最小的新字符串。 示例1 输入 bab 输出 ab 示例2 输入 baca 输出 bac 备注: ASCII字符集包含 94 个可打印字符(0x21 - 0x7E),不包含空格。 对于字符串s,我们求出其每个字符最后出现的位置,用栈遍历s,对于第i个字符,如果栈顶字符大于这个字符并且栈顶字符最后出现的位置大于i就弹出栈顶字符并存入第i个字符,否则直接存入第i个字符,最后倒序输出栈内字符。 #include<iostream> #include<cstring> #include<map> #include

C++常用字符串函数使用整理

一世执手 提交于 2020-03-29 00:57:07
strlen(字符数组) 功能:求字符串长度。 说明:该函数的实参可以是字符数组名,也可以是字符串。 使用样例: char s1[80] = "China"; cout<<strlen(s1)<<'\n';      //输出结果为5 cout<<strlen("大学生")<<'\n';   //输出结果为6  结果说明:一个汉字有两个字节,所以strlen("大学生")的结果为6。 strcpy(字符数组1,字符数组2) 功能:将字符数组2中的字符串复制到字符数组1中 说明: (1)字符数组1的长度必须大于等于字符数组2的长度。 (2)复制时连同字符串后面的'\0'一起复制到字符数组1中。 (3)不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。 (4)字符数组的复制只能用strcpy函数处理。用一个赋值语句只能将一个字符赋给一个字符型变量或字符型数组元素。但可以在定义的时候初始化。 如以下形式: str1 ={''Good"};    //不合法 str1 = str2;      //不合法 char a[5],c1,c2; c1 = 'A'; c2 = 'B';    //合法 c[0] = 'C';       //合法 char g[20] = "aaaa''   //合法 使用样例: `char a[20]="aaaaaa",b[20]="bbb";`

shell编程之SHELL基础(1)

点点圈 提交于 2020-03-28 23:02:44
shell脚本基础 shell是一个命令行解释器,她为互用提供了一个想linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动。挂起。停止甚至编写一些程序。 shell还是一个功能相当强大的编程语言,易编写,易调试,灵活醒较强。shell是解释执行的脚本语言,在shell中可以直接调用linux系统命令 脚本的执行 1 echo输出命令 echo [选项][输出内容] 选项: -e : 支持反斜线控制的字符串转换 控制字符 作用 \a 输出警告音 \b 退格键,也就是像左删除健 \n 换行符 \r 回车健 \t 制表符,也就是tab \v 垂直制表符 \0nnn 按照八进制acsii表输出字符,其中0未数字零,nnn是三位八进制 \xhh 安卓十六进制输出输出字符 在echo中输出颜色 echo -e "\e[1;31m aaaa \e[0m" 30m = 黑色, 31m = 红色, 32m = 绿色,33m = 黄色 34m = 蓝色 , 35m = 洋红, 36买= 青色, 37m = 白色 2 第一个脚本 #i/bin/bash #i/bin/bash #the first program echo -e "\e[1;34m hello \e[0m" 3 脚本执行 赋予执行权限,直接运行 chmod 755 hello.sh ./hello.sh

C#正则表达式

天大地大妈咪最大 提交于 2020-03-28 21:16:30
表达式 匹配 /^\s*$/ 匹配空行。 /\d{2}-\d{5}/ 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。 /<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/ 匹配 HTML 标记。 下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 说明 \ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”,“\(”匹配“(”。 ^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“\n”或“\r”之后的位置匹配。 $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与“\n”或“\r”之前的位置匹配。 * 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。 + 一次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配。+ 等效于 {1,}。 ? 零次或一次匹配前面的字符或子表达式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。 { n } n 是非负整数。正好匹配 n 次。例如,“o{2}”与“Bob”中的“o”不匹配,但与

天梯---至多删三个字符(DP)

帅比萌擦擦* 提交于 2020-03-28 17:56:46
给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的、长度在区间 [4, 1] 内的字符串。 输出格式: 在一行中输出至多删掉其中 3 个字符后不同字符串的个数。 输入样例: ababcc 输出样例: 25 提示: 删掉 0 个字符得到 "ababcc"。 删掉 1 个字符得到 "babcc", "aabcc", "abbcc", "abacc" 和 "ababc"。 删掉 2 个字符得到 "abcc", "bbcc", "bacc", "babc", "aacc", "aabc", "abbc", "abac" 和 "abab"。 删掉 3 个字符得到 "abc", "bcc", "acc", "bbc", "bac", "bab", "aac", "aab", "abb" 和 "aba"。 参考于: https://msd.misuland.com/pd/2884250171976189282 dp[i][j]表示的从前i个字符中删除恰好j个,剩下字符构成的字符串有多少种不同的,在上面样例中就是: dp[6][0]=1; dp[6][1]=5; dp[6][2]=9; dp[6][3]=10; 答案就是这些值累加。 如何递推dp[i][j]

大家都懂的 JSON 解析器原理(一)简介 & 低配版入门

一曲冷凌霜 提交于 2020-03-28 17:41:51
没学过编译原理,做一个 JSON 解析器难吗?——难!是不是就不能“迎难而上”呢?——不是!越是难的越是一个挑战!——笔者这里尝试通过通俗易懂的行文为大家介绍一下 JSON 解析器,——那一串串长长的 JSON 文本到底是如何被解析成为 Java 里面“可以理解的”对象的。前面的铺垫可能比较长,但请尽量不要跳过,因为那都是基础,尤其对于我们非科班来说,应要恶补。当然,为照顾大家的理解程度(包括我自己,我也会以后回看自己的代码,以此反复理解、反复消化),我会把代码写多点注释,把代码可读性提高那么一点点,因为网上很多写解析器的大神都是从 C 语言高手过来的,明显带有过程式的风格。因此我会重构这些代码,使得代码更 OO 一些,这样看起来也会紧凑一些,可读性高一些。 目标 输入 JSON 字符串,对象或数组相互嵌套着,如: { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": 10021 }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type":

常用正则表达式

廉价感情. 提交于 2020-03-28 16:17:43
匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:\n\s*\r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^\s*|\s*$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实用 匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 评注:匹配形式如 0511-4405222 或 021-87888822

StringBuffer的用法

坚强是说给别人听的谎言 提交于 2020-03-28 14:55:31
1、StringBuffer对象的初始化 StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。 例如: StringBuffer s = new StringBuffer(); 这样初始化出的StringBuffer对象是一个空的对象,就是我犯的错误。 如果需要创建带有内容的StringBuffer对象,则可以使用: StringBuffer s = new StringBuffer(“abc”); 这样初始化出的StringBuffer对象的内容就是字符串”abc”。 需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的: StringBuffer s = “abc”; //赋值类型不匹配 StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转 StringBuffer对象和String对象之间的互转的代码如下: String s = “abc”; StringBuffer sb1 = new StringBuffer(“123”); StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer String s1