查找最短26個字母字符串:在文本框Text1中輸入任意一串包含小寫字母的字符串(長度n>=26),要求找到長度最小的一段區(qū)間,能夠包含全部26個小寫英文字母。小王設(shè)計了VB程序用于搜索最短字符串,單擊“查找”按鈕command1,若無解,則在標簽Label1中輸出“無解!”,反之程序在標簽Label1中輸出該最小區(qū)間的長度以及字符的開始位置,并在文本框Text2中輸出相應的最短字符串,程序界面如圖所示:
(1)確定初始右邊界:從第1個字符開始,向右搜索到包含全部26個字母的子串,并因此而確定右邊界,同時記錄每個字母在子串中出現(xiàn)過的次數(shù)。
(2)調(diào)整子串左邊界:若左邊界有重復的字母則表明該子串可縮短,故左邊可右移1位……直到找到一個符合條件的子串并記錄,然后子串左邊界再右移1位。
(3)調(diào)整子串右邊界:子串右邊界繼續(xù)右移,在新子串符合條件后,記錄并進行比較。
重復(2)各調(diào)整步驟,直至遍歷完整個字符串,獲得并輸出滿足條件的最小長度字符串。
實現(xiàn)上述功能的VB程序如下,請回答下列問題。
(1)對于字符串“qbwcadsgeqbdatcy”,包括字母“abcde”的最短字符串長度為
7
7
(填數(shù)字)。
(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'數(shù)組f記錄每個小寫英文字母的出現(xiàn)次數(shù)
Dim s(1 To n)As Integer'數(shù)組s記錄每個輸入字符在字母表中的位置
Private Sub Command1_Click
( )
( ?。?/div>
res=““
s1=Text1.Text
For i=1 To Len(s1)
s(i)=①
Asc(Mid(s1,i,1))-96或Asc(Mid(s1,i,1))-Asc(“a“)+1
Asc(Mid(s1,i,1))-96或Asc(Mid(s1,i,1))-Asc(“a“)+1
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'調(diào)整右邊界,直到達到26個字母
Do While ②
k=26
k=26
f(s(pos))=f(s(pos))-1
If ③
f(s(pos))=0
f(s(pos))=0
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
【答案】7;( ?。籄sc(Mid(s1,i,1))-96或Asc(Mid(s1,i,1))-Asc(“a“)+1;k=26;f(s(pos))=0
【解答】
【點評】
聲明:本試題解析著作權(quán)屬菁優(yōu)網(wǎng)所有,未經(jīng)書面同意,不得復制發(fā)布。
發(fā)布:2024/4/20 14:35:0組卷:0引用:1難度:0.3