模式串中#,*把它分成一截截,當某一截在s串中多個位置能找到匹配,找第乙個匹配點,貪心
因為當中間有#,*,可以利用它跳過一些字元,
當遇到#,先跳過乙個字元,其他的一截截貪心去找到匹配位置,若最後剩餘偶數個字元,則match
第一截和最後一截如果是非#和*,必須嚴格匹配
找來的雜湊寫法
#include #include #include #include #include #include using namespace std;
#define ll long long
#define n 105000
struct obj
obj[n];
ll p[n],ha[n];
int tot;
void init(char *s)
if(i==tot-1)
while(cur<=len+1&&cur+obj[i].len<=len+1)
if(cur>len+1||cur+obj[i].len>len+1) return false;
cur+=obj[i].len;}}
--cur;
return cur<=len&&(len-cur)%2==0;
}char s[n];
int main ()
{ p[0]=1;
for(int i=1;i
HDU 1800 字串雜湊
從n個數中,最少能分出幾個單調遞增序列。水題。就是找到n個數中出現次數最多的次數。只是n個數範圍有30個十進位制位,需要當成字串處理,這就用到了字串雜湊。include using namespace std const int maxn 3005 const int mod 100007 stru...
16 字串雜湊 雜湊表
這個方法叫做字串字首雜湊法 先求出來每個字首的雜湊值 問題1 如何來定義某乙個字首的雜湊值 把這個字串看成是乙個p進製的數 每一位上的字母的ascii碼,就是這一位上的數 最後mod上乙個很小的數,就對映到0 q 1 這樣就可以把乙個字串轉換為乙個數字 注意事項1 一般情況下,不能把某個字母對映成0...
HDU4821 字串雜湊 尺取
給你乙個字串s,問你滿足下面兩個條件的子串有多少個?s長度不超過100000,1 leq m l leq s的長度。首先可以採用字串hash將字串處理便於儲存,字串hash我是在網上找的乙個方法,實際上是找乙個基數base,然後採用base進製,可以採用模乙個大質數,也可以是直接採用unsigned...