查漏补缺——字符串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  阅读(246)  评论(1编辑  收藏  举报

导航