C 演算法 萬用字元匹配 雙指標

2021-09-24 10:44:18 字數 1613 閱讀 6529

leetcode相關c++演算法解答:

給定乙個字串 (s) 和乙個字元模式 § ,實現乙個支援 『?』 和 『*』 的萬用字元匹配。

『?』 可以匹配任何單個字元。

『*』 可以匹配任意字串(包括空字串)。

兩個字串完全匹配才算匹配成功。

s 可能為空,且只包含從 a-z 的小寫字母。

p 可能為空,且只包含從 a-z 的小寫字母,以及字元 ? 和 *。

輸入:

s = 「aa」

p = 「a」

輸出: false

解釋: 「a」 無法匹配 「aa」 整個字串。

輸入:s = 「aa」

p = ""

輸出: true

解釋: '』 可以匹配任意字串。

輸入:s = 「cb」

p = 「?a」

輸出: false

解釋: 『?』 可以匹配 『c』, 但第二個 『a』 無法匹配 『b』。

輸入:s = 「adceb」

p = 「ab」

輸出: true

解釋: 第乙個 『』 可以匹配空字串, 第二個 '』 可以匹配字串 「dce」.

輸入:s = 「acdcb」

p = 「a*c?b」

輸入: false

雙指標法:每次遇到就記錄此時的兩個位置,首先將忽略繼續查詢,當不匹配後回到記錄的位置的下乙個位置,並將記錄對應s串中的位置+1,以備下次失配時,回來*匹配多個字元

遞迴回溯法:思想類似於正則匹配,但是此方法只能通過一半的例子

#if 1

vector> memo_bool;

//要考慮多個*的情況

class solution

else if(j < p.length() && (p[j] == '*'))

else if(match != -1)

else

return false;

}while(j < p.length() && p[j] == '*')

j++;

if(j == p.length())

return true;

else

return false;

}};#endif

#if 0

//遞迴回溯法:思想類似於正則匹配,但是此方法只能通過一半的例子

vector> memo_bool;

//要考慮多個*的情況

class solution

private:

bool matchsub(string& s, string& p, int i, int j)

else if(p.length() == j)

ans = false;

else if((p[j] == s[i]) || (p[j] == '?'))

ans = matchsub(s, p, i+1, j+1);

else

else

ans = false;

}memo_bool[i][j] = ans;

return ans;

}};#endif

C演算法 雙指標匹配單詞

leetcode1062題,最長重複子串。比如aabcaabdaab,輸出最長的重複過的aab leetcode758題,字串中的加粗單詞。比如 words ab bc 和 s aabcd 需要返回 aabcd leetcode3題,無重複字元的最長字串。比如pwwkew,最長無重複字元是wke 已...

萬用字元匹配演算法

萬用字元匹配演算法 要求 1,a?b,查詢以a開始,b結尾中間為任意字元的子串出現的次數 2.和的位置可以在前,後或者中間可以有任意多個,可以相互組合 3.起始位置不同的匹配視為兩次不同的匹配,例如,a?b aabbacbc 結果為3,aa aaa結果為2 4.起始位置相同的匹配,視為一次匹配,例如...

演算法練習 萬用字元匹配

給定乙個字串 s 和乙個字元模式 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸入 s aa p a 輸出...