(1)确定初始右边界:从第1个字符开始,向右搜索到包含全部26个字母的子串,并因此而确定右边界,同时记录每个字母在子串中出现过的次数。
(2)调整子串左边界:若左边界有重复的字母则表明该子串可缩短,故左边可右移1位……直到找到一个符合条件的子串并记录,然后子串左边界再右移1位。
(3)调整子串右边界:子串右边界继续右移,在新子串符合条件后,记录并进行比较。
重复(2)各调整步骤,直至遍历完整个字符串,获得并输出满足条件的最小长度字符串。

实现上述功能的VB程序如下,请回答下列问题。
(1)对于字符串“qbwcadsgeqbdatcy”,包括字母“abcde”的最短字符串长度为____(填数字)。
(2)请在画线处填入合适的代码。
Const n = 300
Dim i As Integer, k As Integer, length As Integer, L As Integer
Dim pos As Integer, s1 As String, res As String
Dim f(1 To 26)As Integer '数组f记录每个小写英文字母的出现次数
Dim s(1 To n)As Integer '数组s记录每个输入字符在字母表中的位置
Private Sub Command1_Click()
res = ""
s1 = Text1.Text
For i = 1 To Len(s1)
s(i)=①_____
Next i
k = 0: pos = 1: length = n
For i = 1 To 26
f(i)= 0
Next i
For i = 1 To Len(s1)
If f(s(i))= 0 Then k = k + 1
f(s(i))= f(s(i))+ 1 '调整右边界,直到达到26个字母
Do While②_____
f(s(pos))= f(s(pos))- 1
If③_____ Then
k = k - 1
If i - pos + 1 < length Then
length = i - pos + 1
res = Mid(s1, pos, length)
L = pos
End If
End If
pos = pos + 1
Loop
Next i
If res <> "" Then
Text2.Text = res
Label1.Caption = "最短长度:" + Str(length)+ "开始位置:" + Str(L)
Else
Label1.Caption = "无解!"
End If
End Sub

同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

