【Java|golang】1048. 最长字符串链

news/2024/7/7 20:49:48

给出一个单词数组 words ,其中每个单词都由小写英文字母组成。

如果我们可以 不改变其他字符的顺序 ,在 wordA 的任何地方添加 恰好一个 字母使其变成 wordB ,那么我们认为 wordA 是 wordB 的 前身 。

例如,“abc” 是 “abac” 的 前身 ,而 “cba” 不是 “bcad” 的 前身
词链是单词 [word_1, word_2, …, word_k] 组成的序列,k >= 1,其中 word1 是 word2 的前身,word2 是 word3 的前身,依此类推。一个单词通常是 k == 1 的 单词链 。

从给定单词列表 words 中选择单词组成词链,返回 词链的 最长可能长度 。

示例 1:

输入:words = [“a”,“b”,“ba”,“bca”,“bda”,“bdca”]
输出:4
解释:最长单词链之一为 [“a”,“ba”,“bda”,“bdca”]
示例 2:

输入:words = [“xbc”,“pcxbcf”,“xb”,“cxbc”,“pcxbc”]
输出:5
解释:所有的单词都可以放入单词链 [“xb”, “xbc”, “cxbc”, “pcxbc”, “pcxbcf”].
示例 3:

输入:words = [“abcd”,“dbqca”]
输出:1
解释:字链[“abcd”]是最长的字链之一。
[“abcd”,“dbqca”]不是一个有效的单词链,因为字母的顺序被改变了。

提示:

1 <= words.length <= 1000
1 <= words[i].length <= 16
words[i] 仅由小写英文字母组成。

    public int longestStrChain(String[] words) {
        Arrays.sort(words, Comparator.comparingInt(String::length));
        Map<String, Integer> map = new HashMap<>();
        int res = 0;
        for (String word : words) {
            int max = 0;
            for (int i = 0; i < word.length(); i++) {
                String s = word.substring(0, i) + word.substring(i + 1);
                if (map.containsKey(s)) {
                    max = Math.max(max, map.get(s));
                }
            }
            map.put(word, max + 1);
            res = Math.max(res, max+1);
        }
        return res;
    }

在这里插入图片描述

func longestStrChain(words []string) int {
	sort.Slice(words, func(i, j int) bool {
		return len(words[i])<len(words[j])
	})
	mapx:=make(map[string]int,0)
	res := 0
	for _, word := range words {
		max := 0
		for i := 0; i < len(word); i++ {
			s:=word[0:i]+word[i+1:]
			
			if v,ok:=mapx[s];ok {
				max = getMax(max, v)
			}
		}
		mapx[word]= max + 1
		res = getMax(res, max+1)
	}
	return res
}



func getMax(x,y int) int{
	if x>y {
		return x
	}
	return y
}

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/1076124.html

相关文章

清除应用任务时把service等也清掉,如qq音乐等

这个和apk本身的逻辑有关&#xff0c;属于apk本身行为&#xff0c;后台kill的只是activity&#xff0c;并没有kill sevice&#xff0c; 如果播放service是startService启动&#xff0c;或者activity并没有去unbind service&#xff0c;这样service也还会运行.另外也可以在开发者…

Linux创建用户,并赋予管理指定目录的权限

一、创建用户 1.创建用户&#xff1a; useradd 用户名 创建用户的时候会对应创建一个同名的组 2.设置密码&#xff1a; passwd userName 随后会提示输入密码 二、赋予权限 Linux给用户和文件赋予权限 1、先对用户所属的的组赋权限&#xff1a; chown -R 用户名:用户组 目录 2、…

2023-04-27 polardbx-LSM-tree的Parallel Recovery性能优化

背景 数据库的Crash Recovery时长关系到数据库的可用性SLA、故障止损时间、升级效率等多个方面。本文描述了针对X-Engine数据库存储引擎的一种Crash Recovery优化手段,在典型场景下可以显著缩短数据库实例的故障恢复时间,提升用户使用感受。 当前面临的问题 X-Engine是阿里…

IT技术发展与应用:TOP技能探讨及学习建议

随着信息技术的快速发展&#xff0c;IT技术已经深入到我们生活的方方面面。在这篇文章中&#xff0c;我们探讨了IT技术发展的历程和现在最吃香的技能TOP榜。同时&#xff0c;我们还分享了如何学习这些TOP技能的方法&#xff0c;包括自学、参加课程、参加线上或线下技术交流活动…

SQL——索引

&#x1f4a1; 索引 在关系型数据库中&#xff0c;索引是一种单独的、物理上的对数据库表中的一列或多列的值进行排序的一种存储结构&#xff0c;他是某个表中的一列或着若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单&#xff08;类似于图书目录&#x…

SQL select语句检索数据

编写SQL语句 SQL语句不区分大小写&#xff0c;可以输入在一行或多行中&#xff0c;关键字不能缩写或换行&#xff0c;字句通常放在单独的行中&#xff0c;可以适当使用缩进增加代码的可读性。 SQL SELECT 语句的功能 映射&#xff1a;选择由查询返回的表中列。可以根据需要选…

社科院与美国杜兰大学金融管理硕士项目——选择在职读研是正确的吗

这个世界上&#xff0c;根本没有正确的选择。我们只不过要努力奋斗&#xff0c;使当初的选择变得正确。最近有咨询项目的同学总是在纠结是否要在职读研&#xff0c;在职读研是否是一条正确的路。当我们为此纠结时&#xff0c;其实只有一条路&#xff0c;那就是选择向前走。往前…

ChatGPT搭建AI网站实战

1.概述 ChatGPT是一款基于GPT-3.5架构的大型语言模型&#xff0c;它能够进行自然语言处理和生成对话等任务。作为一款智能化的聊天机器人&#xff0c;ChatGPT有着广泛的应用场景&#xff0c;如在线客服、智能助手、个性化推荐等。今天笔者给大家分享一下如何使用ChatGPT的API模…