LeetCode-字符串
刷题
hclbeloved
这个作者很懒,什么都没留下…
展开
-
Aho-Corasick(AC自动机)
1 介绍trie树:LeetCode-Trie树_hclbeloved的博客-CSDN博客AC 自动机算法,全称是 Aho-Corasick 算法。其实,Trie 树跟 AC 自动机之间的关系,就像单串匹配中朴素的串匹配算法,跟 KMP 算法之间的关系一样,只不过前者针对的是多模式串而已。所以,AC 自动机实际上就是在 Trie 树之上,加了类似 KMP 的 next 数组,只不过此处的 next 数组是构建在树上的。2 实现// Trie4AhoCoras...原创 2022-02-18 11:13:52 · 925 阅读 · 0 评论 -
字符串查找-KMP算法
这个算法是自己对购买课程中的一个章节的一个总结。1 KMP 算法基本原理KMP 算法是根据三位作者(D.E.Knuth,J.H.Morris 和 V.R.Pratt)的名字来命名的,算法的全称是 Knuth Morris Pratt 算法,简称为 KMP 算法。KMP 算法的核心思想,跟上一节讲的 BM 算法非常相近,但是KMP是从前向后依次对比,与BM算法中从后向前对比是不同的,这里从前向后和从后向前,都是以模式串来看的,也就是将主串与模式串从前向后对比,或者是从后向前对比。我们假设主串是原创 2022-01-01 11:13:32 · 736 阅读 · 0 评论 -
字符串查找-BM算法
这个算法是自己对购买课程中的一个章节的总结。1 BM 算法的核心思想我们把模式串和主串的匹配过程,看作模式串在主串中不停地往后滑动。当遇到不匹配的字符时,BF 算法和 RK 算法的做法是,模式串往后滑动一位,然后从模式串的第一个字符开始重新匹配,如图1.1所示。图 1.1举个例子解释一下,具体如图1.2所示。在这个例子里,主串中的 c,在模式串中是不存在的,所以,我们可以一次性把模式串往后多滑动几位,把模式串移动到 c 的后面。图 1.2...原创 2022-01-01 11:03:42 · 1306 阅读 · 0 评论 -
LeetCode-049-字符串-变位词-字母异位词分组
class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { // 方法一:可行,但是速度较慢,参考:https://leetcode-cn.com/problems/VabMRr/ // int n = strs.size(); // vector<vector<int>>.原创 2021-12-31 10:10:36 · 141 阅读 · 0 评论 -
LeetCode-438-字符串-变位词-找到字符串中所有字母异位词
class Solution {public: vector<int> findAnagrams(string s, string p) { vector<int> r; do { int n = p.length(), m = s.length(); if (n > m) { break; .原创 2021-12-31 10:08:49 · 156 阅读 · 0 评论 -
LeetCode-097-字符串-子序列-字符串的交织
从上到下的动态规划,并配合备忘录的剪枝操作。class Solution {public: vector<vector<int>> dp; bool isInterleave(string s1, string s2, string s3) { // 方法一:递归,对字符串“从前到后”进行扫描,超出时间限制 // 为了缩短时间,可将方法一中的“对字符串从前向后扫描的递归”改为“对字符串从后向前扫描的递归”, //原创 2021-12-31 10:06:08 · 275 阅读 · 0 评论 -
LeetCode-097-字符串-子序列-子序列的数目
从上到下的动态规划,并且配合备忘录进行剪枝操作。class Solution {public: //dp[i][j]表示 t的前j个元素构成的字符串 在 s的前i个元素构成的字符串 中出现的个数 vector<vector<int>> dp; int numDistinct(string s, string t) { //方法一:dfs超出时间限制 // int n = s.length(), m = t.length原创 2021-12-31 10:03:41 · 274 阅读 · 0 评论 -
LeetCode-1143-字符串-子序列-最长公共子序列
由小到大的动态规划。class Solution {public: int longestCommonSubsequence(string text1, string text2) { //从底到上的动态规划 int n = text1.length(), m = text2.length(); if (0 == n*m) return 0; //dp[i][j]: text1[0...i-1]与tex原创 2021-12-31 10:00:36 · 149 阅读 · 0 评论 -
LeetCode-132-字符串-最少回文分割
从小到大的动态规划//参考题目:https://leetcode-cn.com/problems/M99OJA/class Solution {public: int minCut(string s) { //方法一:借鉴 剑指 Offer II 086. 分割回文子字符串,https://leetcode-cn.com/problems/M99OJA/ 超时 // vector<string> path; // int min原创 2021-12-31 09:58:15 · 354 阅读 · 0 评论 -
LeetCode-131-字符串-分割回文子串
比较简单,直接使用dfs即可。class Solution {public: vector<vector<string>> partition(string s) { vector<string> path; vector<vector<string>> result; helper(s,0,path,result); return result; }原创 2021-12-31 09:55:34 · 86 阅读 · 0 评论 -
LeetCode-647-字符串-回文字符串的个数
1 题目回文字符串的个数2 解答class Solution {public: int countSubstrings(string s) { int count = 0; for (int i = 0; i < s.size(); i++) { count += palindrome(s, i, i) + palindrome(s, i, i + 1); } retu原创 2021-12-31 09:53:07 · 96 阅读 · 0 评论 -
LeetCode-005-字符串-回文字符串
1 题目005 最长回文子串2 解答class Solution {public: string longestPalindrome(string s) { //方法一 // string res; // for (int i = 0; i < s.size(); i++) // { // // 以 s[i] 为中心的最长回文子串 // string s1 = pa原创 2021-12-31 09:50:12 · 82 阅读 · 0 评论