首页 > 其他分享 >2023年11月第三周总结

2023年11月第三周总结

时间:2023-11-19 22:13:18浏览次数:34  
标签:11 int 第三周 len next char ++ 2023 include

KMP算法

字符串查找算法中的最优解。时间复杂度O(N + M)

下面是自己写的

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdbool.h>
#define ll long long
#define sc scanf
#define pr printf 
#define N 100 


int kmp(char* p, char* q);
int  pre(char* s, int i);

int main(int argc, char* argv[])
{
	char s[N];
	char s1[N];

	sc("%s", &s);
	//	pr("%s", s);
	getchar();
	sc("%s", &s1);
	//	pr("%s", s1);

	int res = kmp(s, s1);

	pr("%d", res); 

	return 0;
}
int kmp(char* p, char* q)
{
	int len = strlen(q);
	int* next = (int*)malloc(sizeof(int) * len);
	int j = 0;
	int i = 0;

	next[0] = 0;
	next[1] = 0;

	for (i = 2; i < len; i++)
	{
		next[i] = pre(q, i);
	}

	for (int i = 0; i < len; i++)
	{
		pr("%d ", next[i]);
	}
	pr("\n");

	j = 0;
	int nextsetp = next[0];
	/*int res = 0;*/

	while (j < len)
	{
		int k = j;

		for (i = nextsetp; q[i] && p[k] == q[i]; i++, k++)
		{
			;
		}
		if (q[i] == 0) {
			free(next);
			return k - len;
		}
		else if (i != 0){
			nextsetp = next[i];
			/*res = k - next[i];*/
			j = k;
		}
		else {
			j++;
		}
	}

	free(next);

	return -1;
}
int  pre(char* s, int i)
{
	int max = 0;

	for (int j = 0, k = i - 1; j < k && s[j] == s[k]; j++, k--)
	{
		max++;
	}

	return max;
}

下面是一个KMP的模板

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdbool.h>
#define ll long long
#define sc scanf
#define pr printf 

int kmp(char* p, char* q);
int* getNextArray(char* s);

int main(int argc, char* argv[])
{
	char s[N];
	char s1[N];

	sc("%s", &s);
	//	pr("%s", s);
	getchar();
	sc("%s", &s1);
	//	pr("%s", s1);

	int res = kmp(s, s1);

	pr("%d", res); 

	return 0;
}
int kmp(char* p, char* q)
{
	int q_len = strlen(q);
	int p_len = strlen(p);
	int* next = getNextArray(q);
	int j = 0;
	int i = 0;

	while(i < p_len && j < q_len) {
		 if (p[i] == q[j]) {
		 	i++;
		 	j++; 
		 }
		 else if (j == -1){
		 	i++;
		 }
		 else {
		 	j = next[j];
		 }
	} 
	return j == q_len? i - j:-1;
}
int* getNextArray(char* s)
{
	int len = strlen(s);
	
	if (len == 1)
	{
		int *next = (int*)malloc(sizeof(int) * 1);
		next[0] = -1;
				
		return next;
	}
	
	int *next = (int*)malloc(sizeof(int) * len);
	
	next[0] = -1;
	next[1] = 0;
		
	int i = 2;//next数组的起始计算位置
	int cn = 0;
	
	while(i < len) {
		if (s[i - 1] == s[cn])  {
			next[i++] = ++cn;
		}
		else if (cn > 0){
			cn = next[cn];
		} else {
			next[i++] = 0;
		}
	}
	 
	return next;
}

 

标签:11,int,第三周,len,next,char,++,2023,include
From: https://www.cnblogs.com/lwj1239/p/17842784.html

相关文章

  • 《2023-2024-1 20232427《网络空间安全导论》第十二周学习总结》
    《2023-2024-120232427《网络空间安全导论》第十二周学习总结》教学学习内容总结本周学习了《网络空间安全导论》的第二章,重点学习了密码学的相关知识。本章1讲述密码学基础,为日后网络空间安全学习打下基础。密码学概述密码的起源代换密码&置换密码机械密码ENIGMA密码机......
  • 11.18每日总结
    this.$set(全局Vue.set方法)this.$set(target,key,value)1target:要更改的数据源(可以是一个对象或者数组)key:要更改的具体数据(索引)value:重新赋的值注:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视......
  • 2023-2024-1 20231319《计算机基础与程序设计》第8周学习总结
    2023-2024-120231319《计算机基础与程序设计》第8周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里作业要求这个作业的目标计算机科学概论第9章《C语言程序设计》第7章学习目标功能设计与面向对象设计面向对......
  • 学年(2023-2024-1)学号(20231311)《计算机基础与程序设计》第8周学习总结
    2023-2024-120231311《计算机基础与程序设计》第8周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第八周作业这个作业的目标1.学习计算机科学概论第9章并完成云班课测试2.《C语言程......
  • 2023-2024-1 20231303 《计算机基础与程序设计》赵泊瑄第八周学习总结
    2023-2024-120231303《计算机基础与程序设计》赵泊瑄第八周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里作业要求的链接2023-2024-1计算机基础与程序设计第八周作业)这个作业的目标总结第八周学习收获作业正文......
  • 学期:2023-2024-1 学号:20231426 《计算机基础与程序设计》第八周学习总结
    作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计作业这个作业的目标通过教材内容了解函数、模块化设计、作业正文https://www.cnblogs.com/hhaxx/p/17842602.html教材学习内容总结《计......
  • 2023-2024-1 学号20231318《计算机基础与程序设计》第8周学习总结
    作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第八周作业这个作业的目标自学教材《计算机科学概论》第9章以及《C语言程序设计》第7章并完成云班课测试。作业正文2023-2024-1学号20231318......
  • 2023-2024-1 20231326《计算机基础与程序设计》第八周学习总结
    2023-2024-120231326《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第八周作业这个作业的目标自学教材《计算机科学概论》第9章《C语言程序设计》第7......
  • CSP/NOIP2023 游记
    比赛的事情不想写了。可能就是不会考试吧,各种地方的失误,各种策略的失误,各种没来由的蠢。大概不知道我发生了什么的也看不懂我在乱抱怨什么。如果能力根本就不足以触碰到,如果区区肮脏的败者也想偷取星杯的话,那就不要以希望之名玩弄本就不存在的胜利啊。只可惜,生活终究不是动漫,里......
  • 2023秋季综合训练(三)
    问题G:夜刀与黑角如果两个人全部访问则ans=4*(n-1)考虑删除没有遍历的节点对于角色A:1.对于以u为根的节点,如果存在A需要访问的节点,则u必须要访问2.对于以u为根的节点,如果存在B需要访问的节点x,dep[x]-dep[u]>=D,则u须要访问3.其他情况,可以不用访问dfs求每个节点是否需要......