Seek the Name, Seek the Fame POJ - 2752

本文深入探讨了KMP算法的实现原理,通过一个具体的字符串匹配问题,详细讲解了如何构造next数组,以及如何利用next数组进行高效字符串匹配。文章通过代码示例,展示了KMP算法的具体应用过程。

//刚开始数组开的太大了1e6,OLE了,, 后来看错了开的太小4*1e4...RE.。。。后来发现题目要求4*1e5.。。AC

 

//字符串s的前next[i]长度的字符和后next[i]长度的字符是相同的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>

using namespace std;

const int N = 4*1e5+5;

int nxt[N];
int cnt = 0;
char s1[N], s2[N];

void GetNext(char s[], int length)
{
	int i=0, j=-1;
	
	nxt[0] = -1;//必须有... 
	
	while(i < length){
		if(j == -1 || s[i] == s[j]){
			i++;
			j++;
			nxt[i] = j;
		}
		else j = nxt[j];
	}	
}

int KMP(char s1[], int n, char s2[], int m)
{
    int i = 0, j = 0;

    while(i < n){
        if(j == -1 || s1[i] == s2[j]){
            i++;
            j++;
        }
        else
            j = nxt[j];
            
        if(j == m){
		    cnt++;
		    j = i+1;//用过的根据题意不能再次检测 
		   // j = nxt[j];
		} 
    }
    return cnt;
}

int main()
{	 
	int n, cnt;
	while(~scanf("%s", s2)){
		cnt = 0;
			
		n = strlen(s2);
		 
		GetNext(s2, n);
		
		int tmp[n+1], t = nxt[n];
		
		while(t){
			tmp[cnt++] = t;
		//	cout << t << " ";
			t = nxt[t];
		}
		for(int i=cnt-1; ~i; i--){
			printf("%d ", tmp[i]); 
		}
		printf("%d\n", n);
	}

    return 0;

}

 

### Fame-Relay 使用方法 Fame-relay 是一种用于处理和转发消息的中间件工具,通常应用于微服务架构中。其主要功能是在不同的服务之间建立可靠的通信通道[^1]。 #### 安装 Fame-Relay 为了使用 Fame-Relay,首先需要安装该软件包: ```bash npm install fame-relay ``` #### 基本配置 创建一个简单的 Fame-Relay 配置文件 `config.js` 如下所示: ```javascript const config = { port: 8080, routes: [ { path: '/api/v1', target: 'http://backend-service' } ] }; module.exports = config; ``` 启动 Fame-Relay 实例可以通过命令行执行: ```bash node relayServer.js ``` 其中 `relayServer.js` 文件内容如下: ```javascript const createRelay = require('fame-relay'); require('./config'); createRelay(config).listen(config.port, () => { console.log(`Fame-Relay listening on ${config.port}`); }); ``` ### Fame-Relay 与 Map 的关联 Map 数据结构可以用来存储路由映射关系,在 Fame-Relay 中起到关键作用。通过 JavaScript 内建的对象或 ES6 提供的新特性——Map 来管理路径到目标地址之间的对应表[^2]。 例如,可以在上述例子中的 `routes` 数组替换为更灵活的 Map 结构来定义路由规则: ```javascript const routeMap = new Map([ ['/api/v1/users', 'http://user-service'], ['/api/v1/orders', 'http://order-service'] ]); // 将 Map 转换回数组形式以便兼容现有代码逻辑 const routesArray = Array.from(routeMap.entries()).map(([path, target]) => ({ path, target })); const configWithMap = { ...config, routes: routesArray }; ``` 这样不仅使配置更加直观易读,而且便于动态修改路由设置而无需重启整个应用服务器[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值