【算法】最长单词链
时间:2019-09-27
本文章向大家介绍【算法】最长单词链,主要包括【算法】最长单词链使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:https://www.cnblogs.com/xinz/p/7119695.html
思路:
太晚了,简单说下,先生成图,然后搜索,剪支优化(还没写)
源码(关键部分):golang实现
package main import ( "container/list" "fmt" "longest-word-chain/src/file" "longest-word-chain/src/plist" ) func Do(l *list.List) { hc, ec := GetWordHeaderAndEnd(l) graph := MakeGraph(hc, ec, l.Len()) chans := list.New() for i := 0; i < len(graph); i++ { chanList := list.New() chanList.PushBack(plist.GetListValue(l, i)) visitedArr := make([]bool, l.Len()) visitedArr[i] = true for j := 0; j < len(graph); j++ { if graph[i][j] == 1 && i != j && visitedArr[j] != true { visitedArr[j] = true chanList.InsertBefore(plist.GetListValue(l, j), chanList.Back()) } } for k := 0; k < len(graph); k++ { if graph[k][i] == 1 && i != k && visitedArr[k] != true { visitedArr[k] = true chanList.InsertAfter(plist.GetListValue(l, k), chanList.Front()) } } if chanList.Front() != nil { chans.PushBack(chanList) } } PrintMax(l, chans) PrintAll(l, chans) } func MakeGraph(headerChars []byte, endChars []byte, lenth int) [][]int { graph := make([][]int, lenth) for i := 0; i < lenth; i++ { graph[i] = make([]int, lenth) for j := 0; j < lenth; j++ { graph[i][j] = 0 } } for i := 0; i < len(headerChars); i++ { for j := 0; j < len(endChars); j++ { if headerChars[i] == endChars[j] && i != j { graph[i][j] = 1 } } } return graph } func GetWordHeaderAndEnd(l *list.List) ([]byte, []byte) { headerArr := make([]byte, l.Len()) endArr := make([]byte, l.Len()) i := 0 for item := l.Front(); item != nil; item = item.Next() { s := item.Value.(string) headerArr[i] = s[0] endArr[i] = s[len(s)-1] i++ } return headerArr, endArr } func PrintAll(l *list.List, chans *list.List) { fmt.Print("\n\nPrint all:\n") i := 0 for chan1 := chans.Front(); chan1 != nil; chan1 = chan1.Next() { fmt.Printf("%d.", i) for item := chan1.Value.(*list.List).Front(); item != nil; item = item.Next() { fmt.Printf("%s ", item.Value) } fmt.Println() i++ } } func PrintMax(l *list.List, chans *list.List) { lenth := 0 var maxChan *list.List for chan1 := chans.Front(); chan1 != nil; chan1 = chan1.Next() { curr := chan1.Value.(*list.List) if lenth < curr.Len() { lenth = curr.Len() maxChan = curr } } file.WriteFileAndCreate("answer", maxChan) fmt.Print("\n\nPrint max:\n") for item := maxChan.Front(); item != nil; item = item.Next() { fmt.Printf("%s ", item.Value) } }
完整源码:https://github.com/liujh2010/LearnGolong/tree/master/longest-word-chain
原文地址:https://www.cnblogs.com/liujh2010/p/longest-word-chain.html
- SpringBoot开发案例之整合日志管理
- SpringBoot开发案例之奇技淫巧
- SpringBoot开发案例之整合Spring-data-jpa
- SpringBoot开发案例之整合定时任务(Scheduled)
- SpringBoot开发案例之整合mail发送服务
- SpringBoot开发案例之整合mongoDB
- Docker学习之CentOS 7安装配置
- Docker学习之搭建JavaWeb环境
- Docker学习之搭建JavaWeb环境进阶篇
- Docker学习之网络模式配置
- Docker学习之SSH连接docker容器
- Docker学习之搭建Nginx容器服务
- Docker学习之搭建MySql容器服务
- 初识Python
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
- PHP封装的page分页类定义与用法完整示例
- Swoole实现异步投递task任务案例详解
- Keras预训练的ImageNet模型实现分类操作
- 通过实例解析Python RPC实现原理及方法
- PHP实现的支付宝支付功能示例
- 为Plesk PHP7启用Oracle OCI8扩展方法总结
- PHP模版引擎原理、定义与用法实例
- python如何查看安装了的模块
- Linux下源码包安装Swoole及基本使用操作图文详解
- python实现简易版学生成绩管理系统
- PHP中localeconv()函数的用法
- 解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
- PHP数据对象映射模式实例分析
- Pytorch 解决自定义子Module .cuda() tensor失败的问题