[LeetCode] 524. Longest Word in Dictionary through Deleting

2024-09-06 04:48

本文主要是介绍[LeetCode] 524. Longest Word in Dictionary through Deleting,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题:https://leetcode.com/problems/longest-word-in-dictionary-through-deleting/

题目大意

对s删除某些元素,使得删除后的s 为 d中的某个元素。

思路

trie

首先将 建立tire,然后是用dfs搜索,遍历s。
boolean dfs(TrieNode node,String s,StringBuilder curSb,int index) :是否有d的子树中的节点可以匹配。若有的话,该节点虽然是 isLeaf 也不需要比较。
其中:index 为s的下标。
若当前s[index] 有相应的子树,可以进入继续递归。否则index ++;
最后检查当前结点是否为d中的元素。
其实不会过。

boolean dfs(TrieNode node,String s,StringBuilder curSb,int index) :

class TrieNode{char val;TrieNode[] nextNode = new TrieNode[26];boolean isLeaf;public TrieNode(char val){this.val = val;}
}class Trie{TrieNode root;public Trie(){root = new TrieNode('0');}public void insert(String s){TrieNode curNode = root;for(char ch : s.toCharArray()){if(curNode.nextNode[ch - 'a'] ==null){curNode.nextNode[ch - 'a'] = new TrieNode(ch);}curNode = curNode.nextNode[ch - 'a'] ;}curNode.isLeaf = true;}
}class Solution {String res = "";public String findLongestWord(String s, List<String> d) {Trie trie = new Trie();for(String ed : d){if(ed.length()>s.length())continue;trie.insert(ed);}StringBuilder curSb = new StringBuilder();dfs(trie.root,s,curSb,0);return res.toString();}boolean dfs(TrieNode node,String s,StringBuilder curSb,int index){boolean isExtend = false;for(int i = index ; i < s.length();i++){if(node.nextNode[s.charAt(i) - 'a'] == null)continue;curSb.append(s.charAt(i));isExtend = isExtend || dfs(node.nextNode[s.charAt(i) - 'a'],s,curSb,i+1);curSb.deleteCharAt(curSb.length()-1);}if(!isExtend && node.isLeaf == true && curSb.length() >= res.length()){String tCurSb = curSb.toString();if(curSb.length() > res.length() || tCurSb.compareTo(res)<0)res = tCurSb ;return true;}return false;}
}

逐个匹配

遍历d,对于每个元素ed,若s可以和ed匹配将ed记录,然后比较大小,返回答案。

class Solution {public String findLongestWord(String s, List<String> d) {String res = "";for(String ed : d){int i = 0 ;for(char ch:s.toCharArray()){if(i<ed.length() && ch == ed.charAt(i))i++;}if(i == ed.length() && i >= res.length())if(i> res.length() || ed.compareTo(res)<0)res = ed;}return res;}
}

这篇关于[LeetCode] 524. Longest Word in Dictionary through Deleting的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

C#中的 Dictionary常用操作

《C#中的Dictionary常用操作》C#中的DictionaryTKey,TValue是用于存储键值对集合的泛型类,允许通过键快速检索值,并且具有唯一键、动态大小和无序集合的特性,常用操作包括添... 目录基本概念Dictionary的基本结构Dictionary的主要特性Dictionary的常用操作

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c