查漏补缺——字符串www.qq.com所有非空子串
子串与子序列总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
(腾讯笔试题)选择题:字符串www.qq.com所有非空子串(两个子串如果内容相同则只算一个)个数是(D)
A、1024
B、1018
C、55
D、50
》解析:对于这个题,首先要理解非空子串和非空子序列的区别。非空子串是对于主子串是相对连续的,例如:字符串123456789,
其子串一个元素1,2,3……10,两个元素12,23,34,45……,89。三个元素123,234,345,……789.………………九个元素是123456789。
所以对于这个题,首先不考虑重复的话有1+2+3+……+10=55,然后去除重复的元素ww,w,w,q,‘.’。选D。
》问题:注意两个概念:子串与子序列。
子串是从原字符串中连续截取得到的;而子序列则不要求连续,即可以是离散截取的。
--如果求的是子序列,那么答案是B. 1018。具体计算是: 2^10 = 1024 个子序列,减去空串1个为1023,再减去子序列长度为1时重复的2个w和1个q为1020,最后再减去子序列长度为2时重复的2个ww,只剩下1018个不重复的子序列。
--现在求的是子串,则只有 1 + 2 + 3 + ... + 10 = 55 个,减去重复的两次w,一次q,一次.,一次ww,只剩下 50 个不重复的。选D。
》详解:n代表字符串的长度,非空字串的种类数:n*(n+1)/2,这里的n=10,即10*(10+1)/2=55.题目中提到了非相同的个数。字符串中只要有相同的字符都将会存在相同字串。不是连续相同的字符,在字串字串中会有单个字符的字串的重复,即重复的为m(单个相同字符的个数)-1,在本题目中的.存在两个即m=2,存在重复的的为m-1=1。然而连续的相同字符则n*(n-1)/2.这里的www将存在相同的字串3*(3-1)/2=3,qq则存在2*(2-1)/2=1,最终存在非空、非重复的子字符串的个为:55-1-3-1=50。
》扩展:可能存在相同的字符,一部分连续、一部分和连续的分开,例如##-ABC#D这种,在这里可以先计算连续的(##,2*(2-1)/2=1),然后再来把连续的当作一个字符(#-ABC#D),再计算分开的相同字符的个数即可(2-1=1)。
子串与子序列总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
posted on 2020-10-10 12:04 Alliswell_WP 阅读(950) 评论(1) 编辑 收藏 举报