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

张小明 2026/1/10 19:15:35
郑州专业网站制作建设,山东竞价推广公司,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进行投诉反馈,一经查实,立即删除!

开个网站建设公司多少钱wordpress没有上级目录的写权限

还在为Beyond Compare 5的授权限制而烦恼吗?想要摆脱评估期的束缚,享受专业版带来的极致对比体验?本文将为您详细介绍一套简单易用的Beyond Compare 5授权获取方案,让您轻松获得软件使用权,充分发挥文件对比的强大功能…

张小明 2026/1/3 17:54:32 网站建设

网站焦点图制作教程哪个网站做系统

C函数参数详解:值传递、多参数与局部变量 值传递的基本概念 C默认使用按值传递(pass by value)的方式传递函数参数。这意味着当调用函数时,传递给函数的是实际参数的副本,而不是参数本身。 double volume cube(side);…

张小明 2026/1/10 15:09:03 网站建设

电子政务门户网站建设代码建立网站的主要步骤

在线EPUB编辑器终极指南:3步完成专业电子书制作 【免费下载链接】EPubBuilder 一款在线的epub格式书籍编辑器 项目地址: https://gitcode.com/gh_mirrors/ep/EPubBuilder 还在为电子书制作的技术门槛而苦恼吗?传统工具如Calibre、Sigil虽然功能强…

张小明 2026/1/3 17:54:28 网站建设

网站推广公司 优帮云厦门市建设局与管理局网站

有粉丝问我: 你录动图软件用的是啥? 你录视频用啥软件啊? 你的视频剪辑用的什么软件? 你平时写作用啥软件? 我今天盘点一下我日常比较常用的、非常好用的几款软件。 截图 Xnip 传送门:https://zh.x…

张小明 2026/1/3 17:54:26 网站建设

七台河市网站建设如何做电商网站设计

简介 RAG技术从早期的"检索阅读"流水线发展到当前的系统化、可信化与智能体化。其演进可分为三个阶段:2017-2019年初步探索、2020-2024年与LLM融合、2025年走向系统化。当前面临的主要挑战包括检索可靠性、系统效率和生成可信度。未来发展趋势包括GraphRA…

张小明 2026/1/6 13:48:42 网站建设

广西建设厅网站是什么做网站一般用什么 语言

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①如何判定模型是否为封闭模型 二&#xff…

张小明 2026/1/3 19:54:15 网站建设