字符串

LeetCode:Valid Number

徘徊边缘 提交于 2020-04-16 08:15:05
【推荐阅读】微服务还能火多久?>>> 1、题目名称 Valid Number(判断字符串中内容是否为数字) 2、题目地址 https://leetcode.com/problems/valid-number/ 3、题目内容 英文:Validate if a given string is numeric. 中文:给出一个字符串,检查这个字符串中内容是否是一个数字 例如:“0”、“ 0.1”、“2e10”是数字,“abc”、“1 a”不是数字 4、解题方法1 使用正则表达式检查字符串是一个比较好的方法,正则表达式的结构如下图所示: 对应的正则表达式为:^([+-])?((\d+)(\.)?(\d+)?|(\d+)?(\.)?(\d+))(e([+-])?(\d+))?$ Java代码如下,注意为了让编译器不把字符“\”识别为转义字符,须将“\”转换为“\\”使用。 import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 功能说明:LeetCode 65 - Valid Number * 开发人员:Tsybius2014 * 开发时间:2015年9月18日 */ public class Solution { /** * 判断指定字符串是否为数字 * @param s 字符串 * @return

Redis研究-1.简单动态字符串

烈酒焚心 提交于 2020-03-26 12:12:21
3 月,跳不动了?>>> 我们知道,在C字符串中,底层的实现是使用c字符数组来实现的,但是在高性能以及内存安全方面,使用底层的c字符串是满足不了的,举个简单的例子,如果你使用strcat(s,s1)函数,如果在操作之前不判断s的空间是否能够容纳s1的内容,那么就很有可能导致内存溢出,而导致操作失败,因此,为了满足性能及内存安全方面的要求,Redis实现了SDS。 SDS的定义是(位于sds.h): struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 数据空间,默认是使用C字符串的空字符结尾的 char buf[]; }; 其中每项的含义已经在注释中说明。 通过上面的定义,我们可以看到,sds与传统的c字符串做了几方面的优化: 在sds中,记录了“字符数组”的的长度len; 通过使用free可以实现预分配策略优化。 通过这两方面的优化,我们可以得到以下方面的提升: 在做需要设计到内存扩展方面的操作的时候,只要检查free属性,就可以很容易得到是否需要扩展内存,从而避免内存溢出; 在获取字符串长度方面,再也不用花费O(N)时间复杂度,只主要获得len属性就可以得到长度,时间复杂度变为O(1); 我们知道,C字符串和底层数组之间是有密切联系的,因此每次增加或者缩短一个C字符串

算法练习:将字符串中所有的空格替换为'%20'(只用基本数据结构)

谁说胖子不能爱 提交于 2020-03-16 17:54:36
某厂面试归来,发现自己落伍了!>>> <!-- lang: java --> package codinginterview; /** * 写一个函数,把字符串中所有的空格替换为%20 。 * 分析: * 先遍历一次字符串,得到空格个数,进而得到将空格转换成%20后的串长度 (每个空格替换为%20需要增加2个字符,x个空格增加2x个字符)。 * 然后从后向前依次对空格进行替换,非空格原样拷贝。 * 如果原串有足够大的空间, 则替换过程直接在原串上进行, 因为从后向前替换的过程中,新串用到的空间一定是旧串不需要的空间; * 如果原串的空间不够大,或是就直接是字符串长度,那么就新开一个串来保存替换后的结果. * @author mingdong.cheng * */ public class ReplaceStr { /** * 新开一个数组来保存替换后的结果 * O(n) * @param s * @return */ public static String replace(String s) { if (s == null || s.length() == 0) return s; final char[] c = s.toCharArray(); int len = c.length; int count = 0; for (int i=0;i<len;i++) { if (c

SQL中的字符串拼接

ぐ巨炮叔叔 提交于 2020-03-02 03:15:21
1. MySQL 在Java等编程语言汇总字符串的拼接可以通过加号“+”来实现,比如:"1"+"3"、"a"+"b"。在MySQL中也可以使用加号“+”来连接两个字符串比如下面的SQL: SELECT '12'+'33', FAge+'1' FROM T_Employee +-----------+--------+ | '12'+'33' | FAge+1 | +-----------+--------+ | 45 | 26 | | 45 | 29 | | 45 | NULL | | 45 | 24 | | 45 | 26 | | 45 | 29 | | 45 | 28 | | 45 | 26 | | 45 | 36 | +-----------+--------+ 仔细观察第一列,惊讶吗?这个列的现实结果并不是我们希望的“1233”,而是把“12”和“33”两个字符串当成数字来求两个数的和了;将一个数字与一个字符串用加号“+”链接也是同样的效果,比如这里的第二列。 在MySQL中进行字符串的拼接要使用 CONCAT()函数 ,CONCAT()函数支持一个或者多个参数,参数类型可以为字符串类型也可以是非字符串类 型。对于非字符串类型的参数MySQL将尝试将其转化为字符串类型,CONCAT()函数会将所有参数按照参数的顺序拼接成一个字符串作为返回值。比如下

使用 Levenshtein 寻找彼此相似的字符串对

不羁的心 提交于 2020-03-01 03:33:46
我们爬来了一些数据,接下来以豆瓣畅销书为例。 爬虫爬来的数据有 ['艾伦•图灵传','深入理解计算机系统(原书第2版)','C++ Primer 中文版(第 5 版)','深入理解计算机系统','Web性能权威指南'] 而我们系统中原有的数据有 ['艾伦·图灵传','深入理解计算机系统(原书第2版)','C++ Primer 中文版(第 4 版)','深入理解计算机系统'] 做前端的同志可能一眼就看出来了,两个数组中有三个元素是因为全半角的缘故,是不能全词匹配的,而前两本书事实上是同一本书。而《深入理解计算机系统》是可以全词匹配到的,《Web性能权威指南》一书是可以直接添加到数据库的。 解决方案一: 这个任务大可以交给编辑去做,但是时间复杂度为 N^2,连程序都吃不消跑,更别提让编辑做了。 解决方案二: 去除所有的标点符号,或者将所有全角符号转化为半角。 去掉所有空格。 然后进行全词匹配,这样做有些鲁莽,但是速度一点也不慢。 解决方案三: 我想到了用 jieba 进行中文分词, import jieba book = '艾伦·图灵传' word = jieba.cut(book) words = list(word) # words = ['艾伦', '·', '图灵', '传'] 对于每本书我们都可以进行这样一个分词操作,并可以考虑将标点符号去除。

Redis研究-3.6 Redis 5种类型的基本使用2

ε祈祈猫儿з 提交于 2020-02-29 13:31:10
1.字符串 在Redis中,Redis将字符串当做三种类型来对待,一种是字节串,一种是整数,最后一种是浮点数。因此,针对不同的类型,Redis也有不同的操作,特别是针对后面两种类型,涉及到类型转换的时候,Redis会自动处理。 ** 1.1 整数类型操作** _1.1.1 incr_ 他的作用是在指定的key上进行加1操作特别的,如果在Redis中不存在这个key,那么,先在Redis中创建这个key,然后再执行加1操作。 操作: get redis_int 结果: (nil) 操作: incr redis_int 结果: (integer) 1 _1.1.2 incrby _ 他的作用是在指定的key上执行加法操作。 操作:incrby redis_int 2 结果:(integer) 4 操作:get redis_int 结果:"4" _1.1.3 decr_ 他的作用和incr相反。 操作:decr redis_int 结果:(integer) 3 操作:get redis_int 结果:"3" 操作:get redis_an 结果:(nil) 操作:decr redis_an 结果:(integer) -1 1.1.4 decrby 他的作用和incrby相反。这里就不举例啦。 1.2 字节串 _1.2.1 append_ 他的作用是在指定的key的尾部添加指定的子串

freemarker 读取字符串模板,(非文件)

若如初见. 提交于 2020-02-29 10:01:14
最近在做个一个规则匹配,从我多年使用freemarker 的经验决定使用freemarker来做,基于我需要很多规则模板定义,每个规则单独写一个文件太麻烦,于是我感觉freemarker 应该可以使用字符串作为模板,这样我就可以在一个xml定义很多模板,查了查网上资料 大致都是更改templateLoader ,代码如下 package com.venustech.generate; import freemarker.cache.StringTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; /** * Created with IntelliJ IDEA. * User: skyline{http://my.oschina.net/skyline520} * Date: 13-1-9 * Time:

Head First C学习日志,第二章 用指针输入数据

隐身守侯 提交于 2020-02-29 01:27:06
1.scanf scanf的调用格式为: scanf("< 格式说明字符串 >",< 变量地址 >); 第2个参数一定是一个地址。 1.1输入字符串: char name[40]; printf("Enter your name:\n"); scanf("%39s",name); 格式字符串%39s表示:最大接受39个字符(+’\0’),第2个参数name,是数组名作为指针使用,把地址传进了函数,scanf()便可以更新变量的内容。 1.2输入数字 int age; printf("Enter your age:"); scanf("%d",&age); printf("age:%d\n",age); 格式字符串为%d,则接受的第二个参数为一个int*指针。 数组越界问题:如果忘记限制读取字符串的长度,用户就可以输入远远超出程序空间的数据,多余的数据会写到计算机还没有分配好的存储器中。缓冲区溢出很有可能会导致程序出错。 2.使用fgets输入 fgets和scanf一样,接受char指针,不同的是,你必须给它最大长度: char food[5]; printf("Enter favorite food:"); fgets(food,sizeof(food),stdin); 第1个参数为,接受指向缓冲区的指针,第2个参数为,接收字符串的最大长度(包含’\0’),第3个参数为输入

关于go语言中的数字与字符串转换问题及如何利用空接口实现类似java中object类型的效果

人走茶凉 提交于 2020-02-28 15:49:35
本人新手,博文多有不对,多多见谅哈。 无聊的时候发现go语言中的内置类型间的转换尤其复杂; 比如 var a int=10 var b int32=20 c:=a+b 上面第三行就会报错,原因是在go语言中只能且仅能同类型之间进行运算!也就是说go语言是超强类型的语言,int和int16之间都不能运算,浮点数和整型之间更不可能。 想运算,只能强制转换,比如,上面改为: c:=a+int(b) 那么数字转换为字符串呢? v:=1 s:=strconv.Itoa(v) fmt.Println(s+"sss") Itoa只能转换int类型,浮点型是这样的:strconv.FormatFloat(v,'f', -1, 64),其中v是64位浮点数。 须注意,所有数字转换为字符串的函数均在strconv包中,需要在开头部分进行声明导入。 但是觉得贫道觉得还是有点麻烦,因此可以用空接口实现一个tostring函数,不管传入的是何类型数字均能正确的返回相应的字符串,代码如下: package main import ( "fmt" "strconv" ) func main() { x:=3.1415926 fmt.Println("你好"+toString(x)) fmt.Printf("nihao"+toString(0.11)) } func toString(a interface{})

C++使用模板类实现任意类型switch和变量case

让人想犯罪 __ 提交于 2019-12-09 22:23:19
最近自己维护的一个项目 program_options (是一个命令行生成与解析的C++库)在实际应用的时候遇到一个需求: 需要switch一个字符串来执行相应代码块,然而原生的switch-case条件选择语法针对condition有严格的限制,下面摘录一段switch的语法标准: switch statement Transfers control to one of the several statements, depending on the value of a condition. Syntax attr (optional) switch ( condition ) statement attr (C++11) - any number of attributes condition - any expression of integral or enumeration type, or of a class type contextually implicitly convertible to an integral or enumeration type, or a declaration of a single non-array variable of such type with a brace-or-equals initializer.