首页 > 试题广场 > 查找字符串'10,A,B' 中逗号','出现的次数cnt
[编程题]查找字符串'10,A,B' 中逗号','出现的次数cnt
  • 热度指数:12357 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
查找字符串'10,A,B' 中逗号','出现的次数cnt。
由于 SQLite 中没有直接统计字符串中子串出现次数的函数,因此本题用length()函数与replace()函数的结合灵活地解决了统计子串出现次数的问题,属于技巧题,即先用replace函数将原串中出现的子串用空串替换,再用原串长度减去替换后字符串的长度,最后除以子串的长度(本题中此步可省略,若子串长度大于1则不可省)。详情请参考:
SELECT (length("10,A,B")-length(replace("10,A,B",",","")))/length(",") AS cnt
还可以利用OJ系统的Bug直接输出2次来通过测试
SELECT 2 AS cnt

编辑于 2017-07-23 14:55:02 回复(17)

当这行代码ac时我笑出声

select 2 as cnt;
发表于 2019-03-12 21:10:07 回复(4)
select length('10,A,B') -length(replace('10,A,B',",",""))
length():统计字符串长度
replace(字符串,“需要替换的子串”,“用于替换子串的字符串”)
将,替换为空,字符串缩短的长度就是,号的个数
编辑于 2017-08-31 11:19:14 回复(2)
大家都用length()函数,如果考虑到中文的话,其实应该用char_length()函数,只是牛客这里不支持char_length()函数,不知道是不是版本问题;
char_length(): 统计的是字符长度,而length()函数统计的是字符串的字节长度,所以length('中')在utf8下的结果是3,而char_length('中')的结果仍然是1.
另外除了用replace()函数进行替换外,insert()函数也可以进行替换,这里好像又不支持insert()函数,下面是我的两种语句,在mysql5.5的本地环境下都可以正确,但是在牛客这里就报错了,语句如下:
select char_len('A,10,B')-char_len(insert((insert('10,A,B',3,1,'')),4,1,''));
或 select char_length('A,10,B')- char_length(replace('10,A,B',',',''));
编辑于 2018-03-11 00:50:33 回复(1)
运行代码:
SELECT 
length( '10,A,B') - length(REPLACE( '10,A,B',',',''));

解题思路:
1.通过length函数获得字符串的长度:length( '10,A,B')
2.通过replace函数,用空字符替代掉所求字符,并获得替代后的字符串长度: length(REPLACE( '10,A,B',',','')
3.两者相减,获得所求字符出现的次数:length( '10,A,B') - length(REPLACE( '10,A,B',',',''));
发表于 2019-05-26 02:51:25 回复(4)
select (length("10,A,B") - length(replace("10,A,B", ",", "")))  as cnt;
解题思路:
①巧用length函数和replace,length函数计算字符串的长度,length("10,A,B")算出整个字符串的长度。
②使用replace将 , 替换为空,那么整个字符串减少的长度等于 , 的长度,两者相减就是 , 出现的次数。
发表于 2019-12-01 15:53:14 回复(0)
select length('10,A,B') - length(replace('10,A,B',",","")) as cnt
发表于 2020-01-02 21:05:39 回复(0)
select length('10,A,B') -length(replace('10,A,B',",",""))
另外可以了解一下hive里面的行转列
发表于 2019-12-12 03:24:02 回复(0)
select (length("10,A,B")-length(replace("10,A,B",",",""))) as cnt

发表于 2019-11-02 16:14:13 回复(0)
用replace()函数把  '10,A,B'  中的  ','  替换为  ' '  空
发表于 2019-06-15 17:23:50 回复(0)
select (length('10,A,B')-length(REPLACE('10,A,B',",","")))/length(',') AS cnt

【题解参考@wasrehpic】SQLite 中没有直接统计字符串中子串出现次数的函数,因此大家都用length()函数与replace()函数的结合解决了统计子串出现次数的问题。
先用replace函数将原串中出现的子串用空串替换,变成'ABC',再用原串长度减去替换后字符串的长度,最后除以子串的长度(本题中此步可省略,若子串长度大于1则不可省)。
发表于 2019-06-12 16:40:20 回复(0)
SELECT (LENGTH('10,A,B') - LENGTH(REPLACE('10,A,B',',','')))/LENGTH(',')
空字符串length('')不占长度,而一个length(',')=1,使用空串替换逗号,替换前的length-替换后的length,两者之差即为子串的总长度,对单个子串的长度取模即为子串的个数
发表于 2019-04-25 16:09:08 回复(0)
select length('10,A,B')-length(replace('10,A,B',",","")) as cnt;
# length() , replace()
发表于 2018-11-27 15:49:35 回复(0)
select length('10,A,B')-length(replace('10,A,B',",","")) as cnt;
发表于 2018-11-16 21:44:47 回复(0)
用空值replace掉逗号,减去原字符串长度即可得逗号数量。
发表于 2018-09-14 16:38:49 回复(0)
SELECT (length("10,A,B")-length(replace("10,A,B",",","")))/l
发表于 2018-08-30 15:18:50 回复(0)
替换replace("","","")
长度length('字符串')要加引号
发表于 2018-07-31 16:37:44 回复(0)
select (length('10,A,B' )-length(replace('10,A,B' ,',',''))) as cnt
发表于 2018-07-29 20:04:42 回复(0)


select (length("10,A,B")-length(replace("10,A,B",",","")))/length(",") as cnt
发表于 2018-07-24 11:29:38 回复(0)