出鞘之劍指offer 第19題 正規表示式匹配

2021-10-06 07:13:06 字數 1045 閱讀 4233

實現乙個函式用來匹配 '.' 和 '*' 的正規表示式。模式中的字元 '.' 表示任意乙個字元,而 '*' 表示他前面的字元可以出現任意次(含0次)。在本題中,匹配是指字串的所有字元匹配整個模式。 

用遞迴來做。如果掃瞄到『*』,就有三種情況。掃瞄到『.』,就有一種情況。 

package offer.xzs.nineteenth;

public class demo01

public static boolean match(char str, char pattern)

return ismatch(str, 0, pattern, 0);

}public static boolean ismatch(char str, int i, char pattern, int j)

if (j + 1 < pattern.length && pattern[j + 1] == '*') else

}if (str[i] == pattern[j] || pattern[j] == '.')

return false;

}}

是用動態規劃。 

package offer.xzs.nineteenth;

public class demo02

public static boolean match(char str, char pattern)

boolean dp = new boolean[str.length + 1][pattern.length + 1];

dp[0][0] = true;

for (int i = 0; i <= str.length; i++) else

} else if (i > 0 && (str[i - 1] == pattern[j - 1] || pattern[j - 1] == '.')) }}

return dp[str.length][pattern.length];

}}

出鞘之劍指offer 第14題 剪繩子

給你一根長度為n的繩子,請把繩子剪成m段 m和n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 請問k 0 k 1 k m 可能的最大乘積是多少?使用動態規劃。package offer.xzs.fourteenth public class demo01 public sta...

出鞘之劍指offer 第12題 矩陣中的路徑

設計乙個函式,判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中上 下 左 右移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。用回溯法,也就是相當於暴力 package offer.xzs.twelvfth public ...

出鞘之劍指offer 第18題 刪除鍊錶的節點

題目一 在o 1 時間內刪除鍊錶節點 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。鍊錶節點定義如下 struct listnode void deletenode listnode head,listnode temp 如果節點是尾節點,則,從頭結點開始遍歷,遍歷到前...