用二进制来编码字符串“abcdabaa”,需要能够根据编码,解码回原来的字符串,最少需要()长的二进制字符串?
答案:14
Huffman编码结果不是唯一的。a:1位 b:2位 c: 3位 d:3位 所以,abcdabaa一共占用 4 * 1 + 2 * 2 + 3 + 3 = 14
字符串www.qq.com所有非空子串(两个子串如果内容相同则只算一个)个数是()
答案:50
要求的是子串,从左到右一次截取, 10个字符的子串,1个; 9个字符的子串,2个; 8----------------------37----------------------4 ......... 1----------------------10共有:1+2+3+...+10=10*(10+1)/2=55 减去重复的: 1个字符时有3个w,2个q,2个. 2个字符时有2个ww故应减去:(2+1+1+1)=5 答案:55-5=50
KMP算法下,长为n的字符串中匹配长度为m的子串的复杂度为()
答案:O(M+N)
BF算法(普通匹配算法):时间复杂度O(m*n);空间复杂度O(1)
KMP算法:时间复杂度O(m+n);空间复杂度O(n)//模式串大小
串′ababaaababaa′的next数组为()?
答案:011234223456
next数组下标从1开始计算
next[1] 肯定是 0
next[2] 肯定是 1
next[n] 的情况,将前面n-1个字符,计算从首尾开始组成最大的相同子串的长度,如果找到,那么next值是该长度加1,否则next值是1。
举例
next[6]的计算,字符串第六位是 a ,( ababa a ababaa)
将前面的5个字符,从头尾开始取4个组成子串比较,如果不相等,则从首尾取3个字符组成子串继续比较,并以此类推, 如果一直比较到最后一个字符都不相等,那么该next值为1。
4个字符的情况:abab : baba
3个字符的情况:aba : aba 此时相等,那么next[6] = 3+1 = 4
**
下列数据结构不是多型数据类型的是()**
答案:字符串 都是char类型 (堆,栈,有向图都是多型数据类型)
假设某段通信电文仅由 6 个字母 ABCDEF 组成,字母在电文中出现的频率分别为2,3,7,15,4,6。根据这些频率作为权值构造哈夫曼编码,最终构造出的哈夫曼树带权路径长度与字母 B 的哈夫曼编码分别为______。(这里假定左节点的值小于右节点的值)
答案:86 1011
长度:(2+3)4+(4+6+7)3+15=86
一棵哈夫曼树的带权路径长度等于树中所有的叶结点的权值乘上其到根结点的路径长度。
**
若初始序列为gbfcdae,那么至少需要 次两两交换,才能使该序列变为abcdefg。任给一个自由a--g这7个字母组成的排列,最坏的情况下需要至少_ 次两两交换,才能使序列变为abcdefg。**
答案 : 5 6
次数最少的交换方法是:每次两两交换至少要使一个字符到达最终位置。
第一次交换a,g结果为:abfcdge
第二次交换c,f结果为:abcfdge
第三次交换f,d结果为:abcdfge
第四次交换e,f结果为:abcdegf
第五次交换g,f结果为:abcdefg
完成,一共交换了5次上面的交换中,由于b正好在最终位置,因此省去了一次交换任给一个自由a--g这7个字母组成的排列,最坏情况需要交换7-1=6次这种最坏情况是每个字符都需要交换一次来达到最终位置,最后一次交换使的两个字符同时到达最终位置。N个字符最坏情况需要至少N-1次交换
若串 =’software’ ,其子串数目为
答案:37
8+7+...+1+1=37;注意加上空串
串既可以用顺序存储,也可以用链式存储。
字符串通常采用顺序存储,但是字符串较长而没有那么大的连续空间时,可以把一个字符串分成多个小串,串与串之间采用链式存储
**
由4个“1”和4个“0”组成的8位二进制补码,能表示的最小整数是?**
答案:-121
这里我们需要知道的是:
正数: 原码 = 反码 = 补码
负数:原码 反码 = 原码除符号位之外的各位求反 补码 = 反码 +1 (如果 +1 之后有进位的,要一直往前进位,包括符号位)
最小的一定是负数,因为使反码绝对值尽量小,这样原码绝对值就更大。补码为10000111,-121(10); 最大的一定是正数,为01111000
字符串′ababaabab′的nextval为()
答案:(0,1,0,1,0,4,1,0,1)
第一步先计算Next[i] 不再赘述
接下来计算nextval[i]的值:
nextval[i]的求解需要比较s中next[i]所在位置的字符是否与s[i]的字符一致,如果一致则用s[next[i]]的nextval的值作为nextval[i],
如果不一致,则用next[i]做为nextval[i]。
nextval[0] = -1;
s[1]=b != s[next[1]]=s[0]=a; nextval[1]=next[1]=0;
s[2]=a = s[next[2]]=s[0]=a, nextval[2]=nextval[0]=-1;
s[3]=b = s[next[3]]=s[1]=b, nextval[3]=nextval[1]=0;
s[4]=a = s[next[4]]=s[2]=a, nextval[4]=nextval[2]=-1;
s[5]=a != s[next[5]]=s[3]=b, nextval[5]=next[5]=3;
s[6]=b = s[next[6]]=s[1]=b, nextval[6]=nextval[1]=0;
s[7]=a = s[next[7]]=s[2]=a, nextval[7]=nextval[2]=-1;
s[8]=b = s[next[8]]=s[3]=b, nextval[8]=nextval[3]=0;
nextval -1 0 -1 0 -1 3 0 -1 0
有的时候下标从1开始即 0 1 0 1 0 4 1 0 1
字符串”qiniu”根据顺序不同有多少种排列组合的方式?
方法一:由于有两个i,可以看成是有5个位置,只要确定了q,n,u的位置,字符串就确定了,因此,是5×4×3=60
方法二:c52*a33=60
StringBuffer是线程安全的,StringBuilder是非线程安全的
卡特兰数公式 h(n)=C(2n,n)/(n+1),适用于出栈情况求和
例如n=3 h(3)=c(6,3)/4=5种
网友评论