最短包含字串的長度
給定字串str1和str2,求str1的字串中含有str2所有字元的最小字串長度。
輸入描述:
輸入包括兩行,第一行乙個字串,代表str
1(1≤
leng
thst
r1≤1
05
)str1( 1 \leq length_ \leq 10^5)
str1(1
≤len
gths
tr1
≤105
),第二行也是乙個字串,代表str
2(1≤
leng
thst
r2≤1
05
)str2( 1 \leq length_ \leq 10^5)
str2(1
≤len
gths
tr2
≤105
)。輸出描述:
輸出str1的字串中含有str2所有字元的最小字串長度,如果不存在請輸出0。
示例1輸入
abcde
ac
輸出3
說明「abc」中包含「ac」,且「abc」是所有滿足條件中最小的。
示例2
輸入
12345
344
輸出0
題解:
雙指標還款法。設 l, r 表示包含 str2 的子串左右邊界,初始時都為0,match 表示 str1 還欠 str2 多少個字元,初始值為 str2 的長度。
首先,我們需要使用雜湊表 hash 記錄 str2 中的不同字元出現次數,方便後面計數需要。
通過 r 從左往右遍歷 str1 ,設當前位置 r = i,分以下幾種情況討論:
**:
#include
#include
#include
using
namespace std;
const
int n =
100001
;const
int inf =
1<<30;
char s1[n]
, s2[n]
;int
main
(void
)++r;}if
( ret == inf ) ret =0;
printf
("%d\n"
, ret)
;return0;
}
字串轉置 字串包含長度不等的字元
字串轉置 字串包含長度不等的字元,eg ab張三cde李f四21王二gh 背景知識 ascii碼字元值都小於 0x80 而漢字的兩個字元一般都是0x80以上第乙個位元組是必需為0x80以上,第二個字元未擴充套件之前gbk碼都是0x80以上,擴充套件後,一些自定義字,完全無視ascii碼規則了,第二個...
最短的包含字串 尺取)
給出乙個字串,求該字串的乙個子串s,s包含a z中的全部字母,並且s是所有符合條件的子串中最短的,輸出s的長度。如果給出的字串中並不包括a z中的全部字母,則輸出no solution。input 第1行,1個字串。字串的長度 100000。output 輸出包含a z的最短子串s的長度。如果沒有符...
最短的包含字串 尺取
給出乙個字串,求該字串的乙個子串s,s包含a z中的全部字母,並且s是所有符合條件的子串中最短的,輸出s的長度。如果給出的字串中並不包括a z中的全部字母,則輸出no solution。第1行,1個字串。字串的長度 100000。輸出包含a z的最短子串s的長度。如果沒有符合條件的子串,則輸出no ...