[LeetCode] Implement strStr() 解题报告

本文提供了两种实现strStr函数的方法:一种是简单的遍历比较,另一种是使用KMP算法。KMP算法通过预处理模式串生成部分匹配表,避免了不必要的比较,提高了搜索效率。

Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or  null if needle is not part of haystack.

» Solve this problem

[解题思路]
时间复杂度线性的解法明显是KMP算法,但是早忘了具体实现了。简单写一个普通的解法。

Update: add a KMP implementation in the end.

[Code]

1:    char *strStr(char *haystack, char *needle) {  
2: // Start typing your C/C++ solution below
3: // DO NOT write int main() function
4: if(haystack == NULL || needle == NULL)
5: return NULL;
6: int hLen = strlen(haystack);
7: int nLen = strlen(needle);
8: if(hLen<nLen)
9: return NULL;
10: for(int i=0; i<hLen - nLen+1; i++)
11: {
12: int j=0;
13: char* p = &haystack[i];
14: for(; j< nLen; j++)
15: {
16: if(*p != needle[j])
17: break;
18: p++;
19: }
20: if(j == nLen)
21: return &haystack[i];
22: }
23: return NULL;
24: }

[注意]
1. Line 10, 循环的结束应该是hLen-nLen+1,减少不必要运算。
2. Line18, 好久没写指针操作,忘了递增p指针。

增加一个KMP实现, 算法请参考算法导论第32章。

1:    char *strStr(char *haystack, char *needle) {  
2: // Start typing your C/C++ solution below
3: // DO NOT write int main() function
4: if(haystack == NULL || needle == NULL) return NULL;
5: int hlen = strlen(haystack);
6: int nlen = strlen(needle);
7: if(nlen ==0) return haystack;
8: if(hlen == 0 ) return NULL;
9: int pattern[100000];
10: GeneratePattern(needle, nlen, pattern);
11: return Match(haystack, needle, pattern);
12: }
13: void GeneratePattern(char* str, int len, int* pattern)
14: {
15: pattern[0] = -1;
16: int k =-1;
17: for(int j =1; j< len; j++)
18: {
19: while(k >-1 && str[k+1] != str[j])
20: k = pattern[k];
21: if(str[k+1] == str[j])
22: k++;
23: pattern[j] = k;
24: }
25: }
26: char* Match(char* haystack, char* needle, int* pattern)
27: {
28: int hlen = strlen(haystack);
29: int nlen = strlen(needle);
30: int k =-1;
31: for(int j =0; j< hlen; j++, haystack++)
32: {
33: while(k >-1 && needle[k+1] != *haystack)
34: k = pattern[k];
35: if(needle[k+1] == *haystack)
36: k++;
37: if(k == nlen-1)
38: return haystack-k;
39: }
40: return NULL;
41: }
基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值