Hard 单词变型成另一个单词 @CareerCup

慕课python期末试题+python基础实例 1.题目内容:某些英语单词的字母经过重新排列后,能获得另外一个单词,如可以将“cinema”转换成另一个单词“iceman”。编写程序,将词表中由相同字母组成的单词聚成一类,并按照单词个数由多到少的顺序输出各类中的全部单词(每类占一行,单词按字典序由小到大排列,之间用空格分隔),若每类中单词个数相同,则按每类中第一个单词的字典序由大到小输出各个类别。输入格式:按字典序由小到大输入若干个单词,每个单词 阅读详情

BFS的变形体。对起始单词的每一个字母都做替换,把替换后的单词加入到queue中,并同时维护一个Map来记录变化前单词和变化后单词的联系。用来回溯时能打印出路径。


package Hard;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;


/**
 * Given two words of equal length that are in a dictionary,  write a method to  trans-
form  one word into another word by changing only one letter at a time. The new
word you get in each step must be in the dictionary.

给定两个有着相同长度且都在字典内的单词,要求写一个方法来把一个单词变型成另一个单词。
一次只能转换一个字母,且每次生成的单词必须在字典内
 *
 */
public class S18_10 {

	public static LinkedList<String> transform(String startWord, String stopWord, Set<String> dictionary) {
		startWord = startWord.toUpperCase();
		stopWord = stopWord.toUpperCase();
		Queue<String> actionQueue = new LinkedList<String>();
		Set<String> visitedSet = new HashSet<String>();
		Map<String, String> backtrackMap = new TreeMap<String, String>();

		actionQueue.add(startWord);
		visitedSet.add(startWord);

		while (!actionQueue.isEmpty()) {
			String w = actionQueue.poll();
			// For each possible word v from w with one edit operation
			for (String v : getOneEditWords(w)) {
				if (v.equals(stopWord)) {		// Found our word! Now, back track.
					LinkedList<String> list = new LinkedList<String>();
					list.add(v);		// Append v to list
					while (w != null) {
						list.add(0, w);
						w = backtrackMap.get(w);
					}
					return list;
				}

				// If v is a dictionary word
				if (dictionary.contains(v)) {
					if (!visitedSet.contains(v)) {
						actionQueue.add(v);
						visitedSet.add(v); 			// mark visited
						backtrackMap.put(v, w);	// w is the previous state of v
					}
				}
			}
		}
		return null;
	}

	// 改变word的某一个字母
	private static Set<String> getOneEditWords(String word) {
		Set<String> words = new TreeSet<String>();
		
		for (int i = 0; i < word.length(); i++) {		// for every letter
			char[] wordArray = word.toCharArray();
			// change that letter to something else
			for (char c = 'A'; c <= 'Z'; c++) {
				if (c != word.charAt(i)) {
					wordArray[i] = c;
					words.add(new String(wordArray));
				}
			}
		}
		return words;
	}

	public static HashSet<String> setupDictionary(String[] words) {
		HashSet<String> hash = new HashSet<String>();
		for (String word : words) {
			hash.add(word.toUpperCase());
		}
		return hash;
	}

	public static void main(String[] args) {
		String[] words = { "maps", "tan", "tree", "apple", "cans", "help",
				"aped", "free", "apes", "flat", "trap", "fret", "trip", "trie",
				"frat", "fril" };
		HashSet<String> dict = setupDictionary(words);
		LinkedList<String> list = transform("tree", "flat", dict);
		for (String word : list) {
			System.out.println(word);
		}
	}
}


单词转换(写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到) 单词转换 给定字典中的两个词,长度相等。写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到。 编写一个程序,返回一个可能的转换序列。如有多个可能的转换序列,你可以返回任何一个。 示例 1: 输入: beginWord = “hit”, endWord = “cog”, wordList = [“hot”,“dot”,“dog”,“lot”,“log”,“cog”] 输出: [“hit”,“hot”,“dot”,“lot”,“log”,“cog”] 使用B 阅读详情

相关推荐

python期中考试试卷.doc

python期中考试试卷 新手也可以参考这些问题以获得进阶的 Python 知识

将词表中由相同字母组成的单词聚成一类,并按照单词个数由多到少的顺序输出各类中的全部单词(每类占一行,单词按字典序由小到大排列,之间用空格分隔),若每类中单词个数相同,则按每类中第一个单词的字典序由大到

编写程序,完成下列题目:(7分) 题目内容: 某些英语单词的字母经过重新排列后,能获得另外一个单词,如可以将“cinema”转换成另一个单词“iceman”。编写程序,将词表中由相同字母组成的单词聚成一类,并按照单词个数由多到少的顺序输出各类中的全部单词(每类占一行,单词按字典序由小到大排列,之间用空格分隔),若每类中单词个数相同,则按每类中第一个单词的字典序由大到小输出各个类别。 输入格式: 按...

欢迎光临雨落星辰的博客 1815

MOOC中的Python语言程序设计课程(北京理工大学)单元测试答案

MOOC中的Python语言程序设计课程(北京理工大学)单元测试答案。包含9个单元的单选题以及编程题答案。编程题每个题目一个文件夹,选择题在一个文件夹。注:此答案用于沟通交流,辅助课程完成。

PYthon期末考试题

题目内容: 某些英语单词的字母经过重新排列后,能获得另外一个单词,如可以将“cinema”转换成另一个单词“iceman”。编写程序,将词表中由相同字母组成的单词聚成一类,并按照单词个数由多到少的顺序输出各类中的全部单词(每类占一行,单词按字典序由小到大排列,之间用空格分隔),若每类中单词个数相同,则按每类中第一个单词的字典序由大到小输出各个类别。   输入格式: 按字典序由小到大输入若干...

Alvassss的博客 1万+

python 入门教材,南京大学课程 PPT

python 入门教材,南京大学课程 PPT,主要课程内容: 1 走近Python 2 Python面面观 3 数据获取与表示 4 强大的数据结构和Python扩展库 5 Python基本数据统计 6 python高级数据处理与可视化 7 面向对象和图形用户界面 进阶:第3周爬虫项目

2017年复旦大学960真题回忆版

复旦大学计算机学院专硕960,2017年真题

python编程期末试题_大学moocPython编程基础期末考试答案

澳大利亚最大的工业城市和海港是()A.堪培拉B.悉尼C.墨尔本D.珀斯目前,澳大利亚的经济支柱是()A.农牧业B.工矿业C.服务业D.交通运输业读“澳大利亚图”,完成下列要求:(1)图中字母代表太平洋的是_______,首都堪培拉是_______(填字母)。(2)G表示___世界面积最小的大陆是()A.澳大利亚大陆B.南极大陆C.欧洲大陆D.南美大陆澳大利亚的平均海拔约350米。人口约2000万(...

weixin_39670511的博客 494

ENSP之配置静态路由

ENSP之配置静态路由 两台路由器两台PC 拓扑图如下: 配置AR1线路上的两条IP地址 配置AR2线路上的两条IP地址 3.AR2上 配置静态IP 路由 AR1上 配置静态IP 路由 设置两台PC 的IP地址 网关 PC1 PC2 全部配置好了之后 现在测试PC1是否ping 得通PC2 在命令行输入 成功的话如下图 ...

浪友与泪的博客 3545

Hard 找到由其它单词组成的最长单词 @CareerCup

用DFS的那个模板就能做出来,值得注意的是一个词必须被除自己外的其他词组成才行,不能是自己组成自己。 package Hard; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import CtCILibrary.A

3649

SimpleFOC STM32实战:基于F103与HAL库,剖析速度环与电流环的协同控制

本文详细介绍了基于STM32F103与HAL库的SimpleFOC实战应用,重点剖析速度闭环控制与电流环的协同工作原理。通过开发环境搭建、参数调试技巧及性能优化方案,帮助开发者高效实现无刷电机精准控制,适用于机器人、无人机等高精度应用场景。

weixin_29170327的博客 476

边缘计算【智能+安全检测】系列教程--使用OpenCV+GStreamer实现真正的硬解码,完全消除马赛克

通过现有博客的GStreamer的解码方式解码,大多情况应该存在上图马赛克的问题,请勿紧张,其实上述url并没有调用硬件解码,后面有调用硬件解码的ULR,我们来在接下来的介绍中释获。通过RTSP协议连接海康威视摄像头将图片送入AI推理,发现OpenCV的VideoCapture使用的是软解码大量消耗了cpu的资源,并无法做到实时数据处理存在5秒钟的延时。只能把解码这部分送到硬件解码器去处理分摊掉cpu的压力,

Starry-SkyJing的博客 2427

Hard 大文本找两个单词最短距离 @CareerCup

如果只要找一次就用第一种O(n)解法 如果要找多次就多用一个Hashtable,把所有的组合都保存起来 package Hard; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import CtCILibrary.AssortedMethods; /** * You

2363

fluent二维叶型仿真_Fluent案例4【自然对流】

自然对流来了!!江苏的高校好多开学了,我啥时候才能开学另外,刚才看了何同学的Mac Pro深度体验视频,我好酸/(ㄒoㄒ)/~~好想拥有一台跑仿真那种sou~sou~sou~的机器。废话不多说了,进入正题!案例题目:一个矩形空腔内有500K恒温小球,矩形空腔充斥空气,边界条件绝热,模型尺寸如下,试模拟空腔内空气流动状态做出温度变化图。(尺寸大小懒得写了,在建模部分里有)操作平台:workbench...

weixin_39724469的博客 3670

面试题 17.22. 单词转换

面试题 17.22. 单词转换 给定字典中的两个词,长度相等。写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到。 编写一个程序,返回一个可能的转换序列。如有多个可能的转换序列,你可以返回任何一个。 示例 1: 输入: beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"] 输出: ["hit","hot","dot","lot","lo

wat1r的博客 332

手把手教你如何修改YOLO11的模型结构(以CBAM和可变性卷积为例)

YOLO11修改模型结构

2401_86807530的博客 1万+

生产实习-实习报告-Raspberry Pi的应用

生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制

青竹小轩的博客 750

java题兔子第三个月生_题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假如兔子都不死,问M个月时兔子的数量,M为键盘读入的正整数。(请用java语言...

import java.util.Scanner;/*** @author ForeverLover*/public class Rabbit {public static void main(String[] args) {long s1 = 1;long s2 = 1;int count;long temp;Scanner in = new Scanner(System.in);count =...

weixin_30113575的博客 421

快速生成2D卡通人物的AI工具:开启Live2D角色创作的新时代

随着这一创新工具的推出,我们正见证着Live2D角色创作进入了一个全新的阶段。它不仅极大地简化了角色设计的过程,也为广大创作者提供了一种全新的表达方式。对于那些渴望将脑海中的构思迅速转化为现实的人来说,这无疑是一大福音。现在就访问项目主页,开始探索无限可能吧!t=O83A项目主页https://human3daigc.github.io/Textoon_webpage/

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 4832

【(本科组)第十一届将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。请问,总共能排列如多少个不同的单词。

字母重新排列 题目 问题描述 将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。   请问,总共能排列如多少个不同的单词。 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 题解 本题看似是全排列,实际不是,因为有两个...

子浩的博客 1万+

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

每日一道算法面试题(3):leetcode3 无重复字符的最长子串

题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"...

Alexlee1986的专栏 325

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

面试题单词转换leetcode

题目 给定字典中的两个词,长度相等。写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到。 编写一个程序,返回一个可能的转换序列。如有多个可能的转换序列,你可以返回任何一个。 来源:力扣(LeetCode) 解题思路 思路一:每个单词都有三个字母,两个单词是否符合转换要求有三种情况,递归树法 T(n) = 3*T(n-1)+ O(n),但是这种方法不...

idaxue的博客 843

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

程序员面试金典 - 面试题 17.22. 单词转换

题目难度: 中等。

随便发挥的博客 250

程序员面试金典——解题总结: 9.18高难度题 18.10给定两个字典里的单词,长度相等。编写一个方法,将一个单词变换成另一个单词,一次只改动一个字母。

#include #include #include #include #include #include #include #include #include #include using namespace std; /* 问题:给定两个字典里的单词,长度相等。编写一个方法,将一个单词变换成另一个单词,一次只改动一个字母。 在变换过程中,每一步得到的新单词都必须

qingyuanluofeng的专栏 1031
上一篇: Hard 动态查找中位数 @CareerCup
下一篇: 同构字符串 Isomorphic Strings
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值