郑州专业网站制作建设山东竞价推广公司

张小明 2025/12/31 9:50:39
郑州专业网站制作建设,山东竞价推广公司,app开发公司哪个好,淄博网站制作网络丰富给定一些短词字符串作为分割词#xff0c;去分割一段长字符串。从前往后遍历分割词#xff0c;查找并分割长字符串为对应的token。分词规则如下: 1.优先匹配最长分割词:若多个分割词可匹配同一位置#xff0c;选择长度最长的;长度相同时#xff0c;按字典序较大的优先。 2.…给定一些短词字符串作为分割词去分割一段长字符串。从前往后遍历分割词查找并分割长字符串为对应的token。分词规则如下:1.优先匹配最长分割词:若多个分割词可匹配同一位置选择长度最长的;长度相同时按字典序较大的优先。2.未匹配部分保留原样:无法匹配分割词的部分直接作为独立token输出。3.输出格式:每个token用括号包裹按原字符串顺序输出。输入描述:短词字符串列表每行一个空行后输入待分割的长字符串。输出描述:括号包裹的分词结果如(token1)(token2)示例1:输入:zhong guozhongguowomei guowo ai zhong guo mei guo ye xing输出(wo)(ai)(zhong guo)(mei guo)(ye)(xing)问题分析给定一组分割词和一个长字符串需要按照特定规则将长字符串分割为多个token。规则包括优先匹配最长分割词、字典序排序以及未匹配部分保留原样。输出格式要求用括号包裹每个token。解决思路分割词预处理将分割词按长度从长到短排序长度相同的按字典序降序排列。遍历分割词从长到短依次检查长字符串中是否有匹配的分割词。分割字符串匹配到的部分作为token未匹配的部分保留原样。输出结果将所有token按顺序用括号包裹输出。代码实现以下是Python、C、Java、JavaScript和C语言的实现代码。Python实现def tokenize(segments, text): # 预处理分割词按长度降序长度相同按字典序降序 segments.sort(keylambda x: (-len(x), x), reverseFalse) tokens [] i 0 n len(text) while i n: matched False for seg in segments: seg_len len(seg) if i seg_len n and text[i:iseg_len] seg: tokens.append(seg) i seg_len matched True break if not matched: # 处理未匹配部分按空格分割 if text[i] : i 1 else: j i while j n and text[j] ! : j 1 tokens.append(text[i:j]) i j return tokens # 读取输入 segments [] while True: line input().strip() if line : break segments.append(line) text input().strip() # 分词 tokens tokenize(segments, text) # 输出结果 print(.join(f({token}) for token in tokens))C实现#include iostream #include vector #include algorithm #include string using namespace std; vectorstring tokenize(vectorstring segments, string text) { // 预处理分割词按长度降序长度相同按字典序降序 sort(segments.begin(), segments.end(), [](const string a, const string b) { if (a.length() b.length()) { return a b; } return a.length() b.length(); }); vectorstring tokens; int i 0; int n text.length(); while (i n) { bool matched false; for (const string seg : segments) { int seg_len seg.length(); if (i seg_len n text.substr(i, seg_len) seg) { tokens.push_back(seg); i seg_len; matched true; break; } } if (!matched) { if (text[i] ) { i; } else { int j i; while (j n text[j] ! ) { j; } tokens.push_back(text.substr(i, j - i)); i j; } } } return tokens; } int main() { vectorstring segments; string line; while (getline(cin, line)) { if (line.empty()) { break; } segments.push_back(line); } string text; getline(cin, text); vectorstring tokens tokenize(segments, text); for (const string token : tokens) { cout ( token ); } cout endl; return 0; }Java实现import java.util.*; public class Main { public static ListString tokenize(ListString segments, String text) { // 预处理分割词按长度降序长度相同按字典序降序 segments.sort((a, b) - { if (a.length() b.length()) { return b.compareTo(a); } return Integer.compare(b.length(), a.length()); }); ListString tokens new ArrayList(); int i 0; int n text.length(); while (i n) { boolean matched false; for (String seg : segments) { int segLen seg.length(); if (i segLen n text.substring(i, i segLen).equals(seg)) { tokens.add(seg); i segLen; matched true; break; } } if (!matched) { if (text.charAt(i) ) { i; } else { int j i; while (j n text.charAt(j) ! ) { j; } tokens.add(text.substring(i, j)); i j; } } } return tokens; } public static void main(String[] args) { Scanner scanner new Scanner(System.in); ListString segments new ArrayList(); while (true) { String line scanner.nextLine(); if (line.isEmpty()) { break; } segments.add(line); } String text scanner.nextLine(); ListString tokens tokenize(segments, text); for (String token : tokens) { System.out.print(( token )); } System.out.println(); } }JavaScript实现function tokenize(segments, text) { // 预处理分割词按长度降序长度相同按字典序降序 segments.sort((a, b) { if (a.length b.length) { return b.localeCompare(a); } return b.length - a.length; }); const tokens []; let i 0; const n text.length; while (i n) { let matched false; for (const seg of segments) { const segLen seg.length; if (i segLen n text.substring(i, i segLen) seg) { tokens.push(seg); i segLen; matched true; break; } } if (!matched) { if (text[i] ) { i; } else { let j i; while (j n text[j] ! ) { j; } tokens.push(text.substring(i, j)); i j; } } } return tokens; } // 读取输入 const readline require(readline); const rl readline.createInterface({ input: process.stdin, output: process.stdout }); const segments []; let text ; let isText false; rl.on(line, (line) { if (line ) { isText true; } else if (!isText) { segments.push(line); } else { text line; rl.close(); } }).on(close, () { const tokens tokenize(segments, text); console.log(tokens.map(token (${token})).join()); });C语言实现#include stdio.h #include stdlib.h #include string.h typedef struct { char **segments; int count; } SegmentList; int compare_segments(const void *a, const void *b) { const char *seg_a *(const char **)a; const char *seg_b *(const char **)b; int len_a strlen(seg_a); int len_b strlen(seg_b); if (len_a len_b) { return strcmp(seg_b, seg_a); } return len_b - len_a; } void tokenize(SegmentList *segments, const char *text, char ***tokens, int *token_count) { *tokens NULL; *token_count 0; int i 0; int n strlen(text); while (i n) { int matched 0; for (int j 0; j segments-count; j) { const char *seg segments-segments[j]; int seg_len strlen(seg); if (i seg_len n strncmp(text i, seg, seg_len) 0) { (*token_count); *tokens realloc(*tokens, *token_count * sizeof(char *)); (*tokens)[*token_count - 1] strdup(seg); i seg_len; matched 1; break; } } if (!matched) { if (text[i] ) { i; } else { int j i; while (j n text[j] ! ) { j; } (*token_count); *tokens realloc(*tokens, *token_count * sizeof(char *)); (*tokens)[*token_count - 1] strndup(text i, j - i); i j; } } } } int main() { SegmentList segments; segments.segments NULL; segments.count 0; char line[1024]; while (fgets(line, sizeof(line), stdin)) { line[strcspn(line, \n)] \0; if (line[0] \0) { break; } segments.count; segments.segments realloc(segments.segments, segments.count * sizeof(char *)); segments.segments[segments.count - 1] strdup(line); } fgets(line, sizeof(line), stdin); line[strcspn(line, \n)] \0; const char *text line; qsort(segments.segments, segments.count, sizeof(char *), compare_segments); char **tokens NULL; int token_count 0; tokenize(segments, text, tokens, token_count); for (int i 0; i token_count; i) { printf((%s), tokens[i]); free(tokens[i]); } printf(\n); free(tokens); for (int i 0; i segments.count; i) { free(segments.segments[i]); } free(segments.segments); return 0; }代码说明预处理分割词将分割词按长度和字典序排序确保优先匹配最长且字典序较大的分割词。分割字符串遍历长字符串依次检查是否有匹配的分割词匹配到的部分作为token未匹配的部分按空格分割。输出结果将所有token用括号包裹并按顺序输出。以上代码实现了题目要求的功能适用于多种编程语言。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

怎么备案网站织梦动漫网站模板

Elasticsearch 集群监控与性能优化指南 在 Elasticsearch 集群的管理和维护中,监控是至关重要的一环。了解集群的实时状态和性能指标,有助于及时发现并解决潜在问题,确保集群的稳定运行。本文将介绍一些实用的监控工具和方法,以及如何通过关键 API 来深入了解集群的健康状…

张小明 2025/12/30 0:15:22 网站建设

房产律师咨询免费24小时在线seo推广专员工作好做吗

🔥 开篇福利:实测好用的「牛牛发布器」免费下载地址已打包在夸克网盘,戳这里先保存👉 「牛牛发布器.exe」链接:https://pan.quark.cn/s/fb2270317e4f备用防失联,Windows电脑直接装,零基础小白也…

张小明 2025/12/30 0:14:48 网站建设

手机网站建设价格低河南发布最新通告

想要让魔兽争霸III的游戏体验提升到全新高度吗?WarcraftHelper这款开源辅助工具就是你的最佳选择!支持1.20e、1.24e、1.26a至1.27b等多个经典版本,本手册将手把手教你如何轻松驾驭这款实用工具。 【免费下载链接】WarcraftHelper Warcraft II…

张小明 2025/12/30 0:14:14 网站建设

网页设计模板网站宝塔面板怎么安装wordpress

终极指南:5分钟掌握微信小程序wxapkg文件解密技巧 【免费下载链接】pc_wxapkg_decrypt_python PC微信小程序 wxapkg 解密 项目地址: https://gitcode.com/gh_mirrors/pc/pc_wxapkg_decrypt_python 你是否对微信小程序的内部机制充满好奇?想要一探…

张小明 2025/12/30 0:13:41 网站建设

如何知道一个网站的流量专业北京翻译公司

系统性能调优指南 在当今,商品硬件升级成本较低的情况下,挖掘硬件的额外性能看似是一项无意义的任务。但如果能获得 20% 甚至 50% 的速度提升呢?优化系统所能带来的益处因运行的任务类型而异,但总有适合每个人的优化方法。下面将介绍一些快速优化 Apache 网络服务器、KDE 和…

张小明 2025/12/30 0:13:07 网站建设

新手做哪类网站网站为什么要进行内容更新吗

Doomcaptcha是一个革命性的游戏化验证码解决方案,将传统的枯燥验证码转变为《毁灭战士》风格的沉浸式游戏体验。这个开源项目让验证过程变得有趣且富有挑战性,彻底改变了用户对验证码的刻板印象。 【免费下载链接】doomcaptcha Captchas dont have to be…

张小明 2025/12/30 0:12:33 网站建设