当前位置: 首页 > news >正文

【从零开始的LeetCode-算法】2135. 统计追加字母可以获得的单词数

给你两个下标从 0 开始的字符串数组 startWordstargetWords 。每个字符串都仅由 小写英文字母 组成。

对于 targetWords 中的每个字符串,检查是否能够从 startWords 中选出一个字符串,执行一次 转换操作 ,得到的结果与当前 targetWords 字符串相等。

转换操作 如下面两步所述:

1.追加任何不存在于当前字符串的任一小写字母到当前字符串的末尾。

  • 例如,如果字符串为 "abc" ,那么字母 'd''e''y' 都可以加到该字符串末尾,但 'a' 就不行。如果追加的是 'd' ,那么结果字符串为 "abcd"

2.重排新字符串中的字母,可以按任意顺序重新排布字母。

  • 例如,"abcd" 可以重排为 "acbd""bacd""cbda",以此类推。注意,它也可以重排为 "abcd" 自身。

找出 targetWords 中有多少字符串能够由 startWords 中的 任一 字符串执行上述转换操作获得。返回 targetWords 中这类 字符串的数目

注意:你仅能验证 targetWords 中的字符串是否可以由 startWords 中的某个字符串经执行操作获得。startWords 中的字符串在这一过程中 发生实际变更。

示例 1:

输入:startWords = ["ant","act","tack"], targetWords = ["tack","act","acti"]
输出:2
解释:
- 为了形成 targetWords[0] = "tack" ,可以选用 startWords[1] = "act" ,追加字母 'k' ,并重排 "actk" 为 "tack" 。
- startWords 中不存在可以用于获得 targetWords[1] = "act" 的字符串。注意 "act" 确实存在于 startWords ,但是 必须 在重排前给这个字符串追加一个字母。
- 为了形成 targetWords[2] = "acti" ,可以选用 startWords[1] = "act" ,追加字母 'i' ,并重排 "acti" 为 "acti" 自身。

示例 2:

输入:startWords = ["ab","a"], targetWords = ["abc","abcd"]
输出:1
解释:
- 为了形成 targetWords[0] = "abc" ,可以选用 startWords[0] = "ab" ,追加字母 'c' ,并重排为 "abc" 。
- startWords 中不存在可以用于获得 targetWords[1] = "abcd" 的字符串。

提示:

  • 1 <= startWords.length, targetWords.length <= 5 * 10^4

  • 1 <= startWords[i].length, targetWords[j].length <= 26

  • startWordstargetWords 中的每个字符串都仅由小写英文字母组成

  • startWordstargetWords 的任一字符串中,每个字母至多出现一次

我的解答

class Solution {public int wordCount(String[] startWords, String[] targetWords) {int res = 0;Set<String> set = new HashSet<String>();// 遍历startWords数组,重组排序字符串,并使用Set集合去除重复项,减少大量重复计算for(String s_str : startWords){char[] s_ch = s_str.toCharArray();Arrays.sort(s_ch);set.add(new String(s_ch));}for(String t_str : targetWords){// 同样遍历targetWords数组,重组排序字符串char[] t_ch = t_str.toCharArray();Arrays.sort(t_ch);String word = new String(t_ch);for(int i = 0; i< t_ch.length; i++){// 使用substring截取字符串并进行拼接,实现移除word中索引为i的字符的效果String sub_word = word.substring(0,i) + word.substring(i+1,t_ch.length);// 查看set集合中是否存在sub_word字符串,存在则计数并退出循环if(set.contains(sub_word)){res++;break;}}}return res;}
}


http://www.mrgr.cn/news/50191.html

相关文章:

  • Linux——Harbor(容器镜像 管理项目)
  • c语言字符函数
  • 力扣随机题
  • Django模型优化
  • MySQL表的基本查询上
  • 【Linux】信号(初版)
  • lego-loam imageProjection.cpp源码注释(一)
  • 242.有效的字母异位词
  • 2022年华为杯数学建模竞赛A题论文和代码
  • Datawhale 组队学习 文生图 Prompt攻防 task02随笔
  • 糖基转移酶数据库及代表性文章进展-汇总系列
  • 力扣题解(鸡蛋掉落,两枚鸡蛋)
  • 用html、css和js来实现冒泡排序
  • FPGA驱动HDMI 初级篇
  • 10月15日 -- 11月15日 ,参与《人工智能导论》学习打卡赢B站大会员
  • 饭局上做到这5点,让你轻松和大家打成一片相谈甚欢!
  • Thread类的基本用用法
  • SpringCloud-OpenFeign-服务接口调用
  • Java数据结构--顺序表
  • nemo-guardrails简单应用