当前位置: 首页 > news >正文

1140:验证子串--next.data()、KMP和find

1140:验证子串--KMP

    • 题目
  • 解析
    • next.data()
    • KMP代码
    • Find代码

题目

在这里插入图片描述

解析

对于字符串的匹配常见的KMP算法【面试常考】

KMP中需要注意的是:应该从下标1开始遍历,因为下标0前面无值,不能匹配next
固在循环外应初始next[0]=0;//易忘点

next[0]=0;//易错点
//i需从1开始遍历,因为下标0前面无值,不能匹配next
	for(int i=1;i<s.size();i++)

便于使用的find代码也在下面了

next.data()

next.data()是std::vector容器的一个成员函数,它的作用是获取底层数组的首地址

vector<int> next(10); // 创建一个有10个int的数组
int* ptr = next.data(); // 获取底层数组的首地址

KMP代码

#include <iostream>
#include <vector>
#include<set>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <climits>  // 包含INT_MAX常量
#include <cctype>
#include<map>
using namespace std;

void getNext(string s,int *next){
	int j=0;
	next[0]=0;
//i需从1开始遍历,因为下标0前面无值,不能匹配next
	for(int i=1;i<s.size();i++){
		while(j>0&&s[i]!=s[j]) j=next[j-1];
		if(s[i]==s[j]) j++;
		next[i]=j;
	}
}

bool check(string s1,string s2){
	if(s2.size()==0) return true;
	vector<int>next(s2.size());
	getNext(s2,next.data());
	int j=0;
	for(int i=0;i<s1.size();i++){
		while(j>0&&s1[i]!=s2[j]) j=next[j-1];
		if(s1[i]==s2[j]) j++;
		if(j==s2.size()) return true;
	}
	return false;
}
int main(){
	string s1,s2;
	cin>>s1>>s2;
	if(check(s2,s1)){
		cout<<s1 << " is substring of " << s2 << endl;
		return 0;
	}
	if(check(s1,s2)){
		cout<< s2 << " is substring of " << s1 << endl;
		return 0;
	}
	cout<<"No substring" << endl;
return 0;
}

Find代码

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
const int N = 1e2 + 10;
int a[N];
int cnt;
int main()
{
	string s1, s2;
	cin >> s1 >> s2;
	if (s1.length() > s2.length())
	{
		if (s1.find(s2) != -1)
			cout << s2 << " is substring of " << s1;
		else
			cout << "No substring";
	}

//这里的else覆盖率长度相等的情况
	else
		if (s2.find(s1) != -1)
			cout << s1 << " is substring of " << s2;
	else
			cout << "No substring";
}

相关文章:

  • 使用yolov8+flask实现精美登录界面+图片视频摄像头检测系统
  • 代理模式的C++实现示例
  • 15.使用读写包操作Excel文件:OpenPyXL 包
  • 麒麟系统利用pycharm生成deb文件
  • 树莓派上的 TensorFlow Lite:从零开始的摄像头图像识别
  • 深入解析 React Diff 算法:原理、优化与实践
  • 如何逐步迭代衍生出一个网络安全产品
  • Podman 运行redis 报错
  • 警惕!Ollama大模型工具的安全风险及应对策略
  • DataWhale 大语言模型 - GPT和DeepSeek模型介绍
  • Android Studio搭建环境并运行项目
  • Debain-12.9使用xinference部署重排模型/rerank
  • 程序编译生成的文件
  • 面试常见概念区分:并发与并行、同步与异步、阻塞与非阻塞、线程同步与互斥
  • 【MySQL】基本操作 —— DML 与约束
  • HashMap ,HashTable , ConcurrentHashMap 面试
  • C++ primer plus 内存模型和命名空间下
  • OSC32IN与OSC32OUT对于无源晶振而言有区别吗?
  • 数字滤波器的设计实现及应用(论文+仿真)
  • 在教育领域的大模型知识引擎 × DeepSeek应用
  • 新疆巴音郭楞州和硕县发生4.6级地震,震源深度10千米
  • 安徽凤阳县明中都鼓楼楼宇顶部瓦片部分脱落,无人员伤亡
  • 8000余万元黄金投入研发后“不知去向”,咋回事?
  • 2025吉林市马拉松开跑,用赛道绘制“博物馆之城”动感地图
  • 浙江理工大学传播系原系主任刘曦逝世,年仅44岁
  • 江西4人拟任县(市、区)委书记,其中一人为“80后”