首页 > 试题广场 > 查找字符串 10,A,B 中逗号,出现的次数cnt
[编程题]查找字符串 10,A,B 中逗号,出现的次数cnt
  • 热度指数:20939 时间限制: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 回复(25)

当这行代码ac时我笑出声

select 2 as cnt;
发表于 2019-03-12 21:10:07 回复(11)
select length('10,A,B') -length(replace('10,A,B',",",""))
length():统计字符串长度
replace(字符串,“需要替换的子串”,“用于替换子串的字符串”)
将,替换为空,字符串缩短的长度就是,号的个数
编辑于 2017-08-31 11:19:14 回复(4)
大家都用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 回复(2)
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)
新思路:Hive SQL语法支持
-- 首先根据split函数将目标字符串按照逗号进行切分,得到的结果是一个数组,然后求出数组元素的个数,减去1就是逗号的个数。
SELECT size(split('10,A,B'',')) - 1 ;

编辑于 2020-06-23 21:05:39 回复(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)
-- length()求字符串长度,replace("sss", "a", "b")将字符串sss中的a替换为b
-- 字符串已经确定,而不是抽象的,灵活运用select 2 as cnt;
select length('10,A,B')-length(replace('10,A,B', ',', '')) as cnt;
发表于 2020-07-17 10:54:01 回复(0)
select 2;
发表于 2020-03-23 19:56:52 回复(0)
select regexp_count('10,A,B',',') cnt from dual
Oracle中可以用正则函数来统计
发表于 2020-04-03 23:17:33 回复(0)
SELECT 2 AS cnt;
用这行SQL抵制这个OJ编译器。
发表于 2020-03-19 23:59:38 回复(0)
select length("10,A,B")-length(replace("10,A,B",",","")) as cnt;
replace(字符串,“需要替换的子串”,“用于替换子串的字符串”)
发表于 2020-07-26 14:29:39 回复(0)
Q51 字符串、字符串长度、replace函数

select 
    length('10,A,B') - length(replace('10,A,B',",","")) as cnt;


发表于 2020-07-25 09:58:43 回复(0)
select length('10,A,B')-length(replace('10,A,B',',','' )) as cnt

此题主要考察length和replace的结合使用,replace(‘字段’,‘字段中的值’,‘替换的值’),将‘,’替换成无,再用原字符串的长度减去去掉‘,’后的长度得到答案。
编辑于 2020-07-22 10:01:07 回复(0)
SELECT 2 AS cnt;

发表于 2020-06-05 15:59:13 回复(0)
replace
发表于 2020-06-03 09:29:57 回复(0)
链接:https://www.nowcoder.com/questionTerminal/e3870bd5d6744109a902db43c105bd50?f=discussion
来源:牛客网
由于 SQLite 中没有直接统计字符串中子串出现次数的函数,因此本题用length()函数与replace()函数的结合灵活地解决了统计子串出现次数的问题,属于技巧题,即先用replace函数将原串中出现的子串用空串替换,再用原串长度减去替换后字符串的长度,最后除以子串的长度(本题中此步可省略,若子串长度大于1则不可省)。详情请参考:
1
SELECT (length("10,A,B")-length(replace("10,A,B",",","")))/length(",") AS cnt;

链接:https://www.nowcoder.com/questionTerminal/e3870bd5d6744109a902db43c105bd50?f=discussion
来源:牛客网
大家都用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',',',''));
编辑于 2020-07-09 09:36:52 回复(0)
很想知道这道题的意义在哪
发表于 2020-05-27 16:09:24 回复(0)
select (length('10,A,B')-length(replace('10,A,B',',','')))/length(',') cnt;

发表于 2020-04-13 00:02:05 回复(0)