最短包含字串的長度

2021-10-14 08:23:28 字數 1310 閱讀 2861

最短包含字串的長度

給定字串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 ...