C语言 | Leetcode C语言题解之第140题单词拆分II

题目:

题解:

struct Trie {int ch[26];bool flag;
} trie[10001];int size;void insert(char* s, int sSize) {int add = 0;for (int i = 0; i < sSize; i++) {int x = s[i] - 'a';if (trie[add].ch[x] == 0) {trie[add].ch[x] = ++size;memset(trie[size].ch, 0, sizeof(trie[size].ch));trie[size].flag = false;}add = trie[add].ch[x];}trie[add].flag = true;
}bool find(char* s, int sSize) {int add = 0;for (int i = 0; i < sSize; i++) {int x = s[i] - 'a';if (trie[add].ch[x] == 0) {return false;}add = trie[add].ch[x];}return trie[add].flag;
}char** ans[1001];
int ansSize[1001];void backtrack(char* s, int sSize, int index) {if (ans[index] == NULL) {ans[index] = malloc(sizeof(char**));if (index == sSize) {ansSize[index] = 1;char* tmp = malloc(sizeof(char));tmp[0] = '\0';ans[index][0] = tmp;return;}ansSize[index] = 0;for (int i = index + 1; i <= sSize; ++i) {int len = i - index;char* word = malloc(sizeof(char) * (len + 1));for (int j = 0; j < len; ++j) word[j] = s[index + j];word[len] = '\0';if (find(word, len)) {backtrack(s, sSize, i);ans[index] = realloc(ans[index], sizeof(char**) * (ansSize[index] + ansSize[i]));for (int j = 0; j < ansSize[i]; ++j) {int len1 = len, len2 = strlen(ans[i][j]);char* tmp = malloc(sizeof(char) * (len1 + len2 + 2));strcpy(tmp, word);if (len2 > 0) {tmp[len1] = ' ';}strcpy(tmp + len1 + 1, ans[i][j]);ans[index][ansSize[index]++] = tmp;}}}}
}char** wordBreak(char* s, char** wordDict, int wordDictSize, int* returnSize) {memset(ans, 0, sizeof(ans));size = 0;memset(trie[0].ch, 0, sizeof(trie[0].ch));trie[0].flag = false;for (int i = 0; i < wordDictSize; i++) {insert(wordDict[i], strlen(wordDict[i]));}backtrack(s, strlen(s), 0);*returnSize = ansSize[0];return ans[0];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第139题单词拆分

题目&#xff1a; 题解&#xff1a; unsigned long long Hash(char* s, int l, int r) {unsigned long long value 0;for (int i l; i < r; i) {value value * 2333ull;value s[i] - a 1;}return value; } bool query(unsigned long long* rec, int len_rec, unsigned…

【代码随想录】【算法训练营】【第30天 1】 [322]重新安排行程 [51]N皇后

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 30&#xff0c;周四&#xff0c;好难&#xff0c;会不了一点~ 题目详情 [322] 重新安排行程 题目描述 322 重新安排行程 解题思路 前提&#xff1a;…… 思路&#xff1a;回溯。 重点&…

抖音a_bogus爬虫逆向补环境

抖音a_bogus爬虫逆向补环境 写在前面 https://github.com/ShilongLee/Crawler 这是我为了学习爬虫而搭建的爬虫服务器项目&#xff0c;目标是作为一个高性能的可靠爬虫服务器为广大爬虫爱好者和安全工程师提供平台进行学习爬虫&#xff0c;了解爬虫&#xff0c;应对爬虫。现已…

Github 2024-06-13开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2Shell项目1TypeScript项目1Swift项目1PHP项目1Blade项目1JavaScript项目1从零开始构建你喜爱的技术 创建周期:2156…

C#面:C#面向对象的思想主要包括什么?

C#面向对象的思想主要包括以下几个方面&#xff1a; 封装&#xff08;Encapsulation&#xff09;&#xff1a;封装是将数据和操作数据的方法封装在一起&#xff0c;形成一个类。通过封装&#xff0c;可以隐藏类的内部实现细节&#xff0c;只暴露必要的接口给外部使用。这样可以…

如何在浏览器书签栏设置2个书签实现一键到达网页顶部和底部

本次设置浏览器为&#xff1a;Chrome浏览器&#xff08;其他浏览器可自行测试&#xff09; 1&#xff0c;随便收藏一个网页到浏览器书签栏 2&#xff0c;右键这个书签 3&#xff0c;修改 4&#xff0c;修改名称 5&#xff0c;修改网址&#xff1a; javascript:(function(…

arm64电源管理之PSCI

PSCIPower State Coordination Interface功耗状态协同接口SCPISystem Control and Power Interface系统控制和电源接口SCMISystem Control and Management Interface系统控制和管理接口SMCCCSMC Calling ConventionSMC调用约定 scpi&#xff1b;通过mailbox核间通信&#xff0c…

借助Historian Connector + TDengine,打造工业创新底座

在工业自动化的领域中&#xff0c;数据的采集、存储和分析是实现高效决策和操作的基石。AVEVA Historian (原 Wonderware Historian) 作为领先的工业实时数据库&#xff0c;专注于收集和存储高保真度的历史工艺数据。与此同时&#xff0c;TDengine 作为一款专为时序数据打造的高…

FullCalendar日历组件集成实战(11)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…

怎么防止源代码泄露?9种方法教会你!

怎么防止源代码泄露&#xff1f;首先要了解员工可以通过哪些方式将源代码传输出去&#xff01; 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘或U盘的winPE启动&#xff0c;甚…

Maven Dependency Tree:深入理解你的项目依赖

在Java开发领域&#xff0c;Apache Maven作为一款强大的构建和项目管理工具&#xff0c;广泛应用于自动化构建、依赖管理和项目报告生成等场景。当处理大型项目时&#xff0c;管理依赖关系变得尤为关键&#xff0c;因为不透明或冗余的依赖可能导致各种问题&#xff0c;从构建失…

Mybatis save、saveOrUpdate、update的区别

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 1. save方法 Mybatis的save方法用于插入一条新的记录。当数据库中不存在相同的记录时&#xff0c;会执行插入操作&#xff1b;如果已经存在相同的记录&#xff0c;则会抛出异常。 int result sqlSession.insert(&…

【SAP-ABAP】-权限批导-批量分配角色给具体用户

需求&#xff1a;SAP期初上线的时候&#xff0c;业务顾问经常会遇到批量创建角色和分配角色权限的情况 岗位需求&#xff1a;一般是业务顾问定义权限&#xff0c;BASIS进行后期运维&#xff0c;今天讲两个批导功能&#xff0c;方便期初上线 此程序功能&#xff1a;给具体用户…

计算各聚类中心

任务描述 本关实现一个函数来计算各簇的中心。 相关知识 在前一个关卡中&#xff0c;我们实现了一个函数来计算距离每个样本最近的簇中心&#xff0c;这样每一个样本都有了所属的簇团&#xff0c;从而将一堆数据分成了 n 个簇&#xff0c;也就是 n 个类。 K-means 算法是一…

leetcode打卡#day41 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 class Solution { public:int fib(int n) {if (n 0) return 0;if (n 1) return 1;return fib(n-1) fib(n-2);} };70. 爬楼梯 class Solution { public://动态规划 -- 爬楼梯int climbStairs(int n) {if (n < 1) return n; //防止空指针vector<int&g…

【Go】十三、TOKEN机制与跨域处理方式

身份校验 对于微服务场景来说&#xff0c;使用 cookie session 来进行身份校验是一种不合适的做法&#xff0c;因为 生成的sessionid 是不存储任何信息的&#xff0c;这样我们如果要在其他模块中进行身份校验就是做不到的&#xff0c;例如&#xff1a;我们无法在商品模块中筛…

Android Unable to determine activity name

报错:Unable to determine activity name的解决办法 最新的Android Studio长颈鹿版(Android Studio Giraffe | 2022.3.1 Patch 4) 新建一个空白的Activity,只能选kotlin. 选No Activity,则可以选Java语言。 新建好后,不像以前的老版本,点击运行,可以直接进入Hello wor…

电脑桌面提醒做事的app 好用的桌面提醒app

在快节奏的现代生活中&#xff0c;我们每天都要通过电脑处理大量的工作事项。然而&#xff0c;繁忙的工作节奏有时会导致我们遗忘某些重要任务&#xff0c;从而带来不必要的损失。为了避免这种情况&#xff0c;选择一款好用的桌面提醒app显得尤为重要。 想象一下&#xff0c;你…

世界上最顶级的动画公司是哪个?基于什么技术?

世界上最顶级的动画公司之一是皮克斯动画工作室&#xff08;Pixar Animation Studios&#xff09;。皮克斯以其技术创新、卓越的动画质量和强大的故事叙述能力闻名。下面是皮克斯的一些关键技术和创新&#xff1a; 1. 计算机动画&#xff08;CGI&#xff09;&#xff1a; 皮…

C语言| 数组

直接定义一个数组&#xff0c;并给所有元素赋值。 数组的下标从0开始&#xff0c;下标又表示数组的长度。 【程序代码】 #include <stdio.h> int main(void) { int a[5] {1, 2, 3, 4, 5}; int i; for(i0; i<5; i) { printf("a[%d] %d\…