`

一个简单的字谜算法

 
阅读更多

最近在看数据结构与算法分析(java语言描述)这本书,书的第一章有这样一个算法题:

输入是由一些字母构成的一个二维数组以及一组单词组成。目标是要找出字谜中的单词,这些单词可能是水平,垂直或沿对角线上任何方向设置的。经过思考,我写出的一个查找算法如下:

//输出字谜中的单词
	public static void outPutlogoGriph(String temp,String[] logogriph){
		for(int k=0;k<logogriph.length;k++){
			if(temp.indexOf(logogriph[k])>=0){
				System.out.println(logogriph[k]);
			}
		}
	}
	//比较字谜中的单词
	public static void getLogoGriph(String[][] s,String[] logogriph){
		String temp = "";
		// 查找水平方向上的单词,从左往右的方向
		for(int i=0;i<s.length;i++){
			//正序的
			temp  = "";
			for(int j=0;j<s[i].length;j++){
				temp += s[i][j];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
			//逆序的
			temp  = "";
			for(int j=s[i].length-1;j>=0;j--){
				temp += s[i][j];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
		}
//		 查找垂直方向上的单词,从上往下的方向
//		 查找垂直方向上的单词,从下往上的方向
		temp = "";
		for(int i=0;i<s[0].length;i++){
			//上下方向的
			temp = "";
			for(int j=0;j<s.length;j++){
				temp += s[j][i];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
			//下上方向的
			temp = "";
			for(int j=s.length-1;j>=0;j--){
				temp += s[j][i];
			}
			//比较,并输出字谜中的单词
			outPutlogoGriph(temp,logogriph);
		}
		//查找第一条对角线(从上往下的对角线)上的单词,正方向(针对的是规则的二维数组)
		temp = "";
		for(int i=0;i<s.length;i++){
			temp += s[i][i];
		}
		//正向的
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
		// 查找对角线上的单词,反方向
		temp = "";
		for(int i= s.length-1;i>=0;i--){
			temp += s[i][i];
		}
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
		//查找第二条对角线,从下往上的对角线
		temp = "";
		for(int i=0;i<s.length;i++){
			temp += s[s.length-i-1][i];
		}
		//正向的(斜向上)
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
		temp = "";
		for(int i=0;i<s.length;i++){
			temp += s[i][s.length-i-1];
		}
		//正向的(斜向下)
		//比较,并输出字谜中的单词
		outPutlogoGriph(temp,logogriph);
	}
	public static void main(String[] args){
		//注意该方法只适用于规则的数组,即不允许String[][]s = new String[4][]这种不规则的数组;
		String[][] s = new String[4][4];
		s[0][0] = "t";
		s[0][1] = "t";
		s[0][2] = "i";
		s[0][3] = "f";
		s[1][0] = "t";
		s[1][1] = "h";
		s[1][2] = "a";
		s[1][3] = "o";
		
		s[2][0] = "w";
		s[2][1] = "t";
		s[2][2] = "a";
		s[2][3] = "w";
		
		s[3][0] = "o";
		s[3][1] = "s";
		s[3][2] = "a";
		s[3][3] = "t";
		String[] logogriph = new String[]{"this","two","fat","that"};
		getLogoGriph(s,logogriph);
	}

 

以后会渐进的补充!

分享到:
评论

相关推荐

    Algorithms-DataStructures:一个存储我所有算法和数据结构工作的存储库

    算法-数据结构这是一个存储库,用于存储我研究算法和数据结构的所有工作。 在下面,您将找到我为LeetCode或在线课程...LeetCode Valid Anagram.py这个问题要求给定两个字符串s和t,编写一个函数来确定t是否是s的字谜

    algorithms:通用算法和数据结构

    字谜 元音 数组分块 反向阵列 反向词 大写 凯撒密码 赎金注5 均值,中位数,众数 两次总和 最大利润 Eratosthenes筛 斐波那契 记忆斐波那契 楼梯 金字塔 矩阵精神 数据结构算法 Queue列 堆栈 链表 挑战: 中点 圆...

    algorithm:算法解决方案-Go,Python,Scala

    对于大型数据集,计算与元素n的平方成正比(O(n ^ 2))的简单实现变得完全不切实际。 按语言组织 按类别组织 类型 描述 细节 执行 堆 有效括号 链表 MergeTwoSortedLists 链表 合并k排序列表 2个指针 困雨水 动态...

    Anagram:一个简单的Java程序,可以生成字谜来解决

    字谜 一个简单的Java程序,可以生成字谜来解决。

    DS-Algos-Python:使用Python对各种数据结构和算法进行编码的解决方案

    使用Python的数据结构和算法这是使用Python中实现的数据结构解决的各种常见编程问题的集合...is an anagram of "cannot aim"我们的带有两个字符串的字谜检查算法,并将根据是否找到字谜给出一个布尔值TRUE / FALSE?阵

    lrucacheleetcode-LeetCode:力扣算法解决方案

    在每个节点中填充下一个右指针 II 帕斯卡三角形 II 单号二 二叉树先序遍历 二叉树后序遍历 LRU缓存 计算具有唯一数字的数字 等分子集总和 斐波那契数 从二叉树构造字符串 二叉树的最大宽度 实现魔术词典 托普利兹...

    javalruleetcode-cs-algorithms:CS算法实践repo

    这个存储库提供了几个编程问题的代码片段。 这些问题是从各种来源阅读的。 只要有可能,就会有链接和问题一起呈现。 编程语言 我主要使用 Javascript、Typescript、Java 和 Scala。 您可以期待使用其中一种编程语言...

    algorithms:您在面试过程中必须处理的一些算法示例(以及我的解决方案)

    我们必须编写一个方法如果我们可以从给定字符串的任何字谜中形成回文,则接受一个字符串并输出 true。否则输出 false。" 002 : “给定一个字符串数组,返回第一个在数组中只出现一次的字符串。” 003 :

    Leetcode扑克-Algos:我最喜欢的一些算法问题-JS&Python

    第一个缺失的正JS 水果入篮JS CodeSignal 街机问题 介绍 10 - 常见字符计数JS & Python 13 - 在括号中反转JS & Python 14 - 交替求和JS & Python 15 - 添加边框JS & Python 16 - 相似吗? JS & Python 18 - 回文重排...

    leetcode2sumc-interview:数据结构与算法面试题及解答

    个整数的数组,找到其中一个重复项。 版本 1:蛮力 版本 2:使用地图/计数器 版本 3:使用元素的总和 版本 4:使用 +/- 标记 版本 5:寻找一个循环 归并排序 使用归并排序算法对数组进行排序。 版本 1:直接合并 ...

    string-interview-questions:求职面试中可能出现的与字符串算法相关的问题

    (解决方案)首先,我们有一个简单的字符串相关编码问题,在编程面试中经常被问到。 你需要用 C、C++、Java 或 Python 编写一个程序来打印给定字符串中的重复字符,例如,如果字符串是“Java”,那么程序应该打印...

    leetcode2sumc-yaalgo:一组任务和解决方案,在算法部分准备面试ya

    我们把所有东西都扔到哈希表中,对于表中每个值的参数(两个数字的总和),我们看看其中是否存在一个等于 pn 的数字 - 这以一种沉闷的方式解决了,实际上,2sum 是 4sum 的特例,最终归结为对 2sum 和递归的不断调用...

    Algorithm-iOS-Crosswords-Generator.zip

    Algorithm-iOS-Crosswords-Generator.zip,在swift上生成纵横字谜的简单算法。基于python的纵横字谜生成器。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Algorithms:算法编码问题的 Java 实现,可以在 CareerCup、Glassdoor、GeeksForGeeks 和 LeetCode 上找到

    给定一个字符串数组,返回一个分组的字谜列表从数组中删除重复项合并排序的数组。 假设其中一个数组的大小与两个数组的大小相加从没有额外空间复杂度的数组中删除 'b' 的重复 'a's 给定一个整数数组,将总和为相同...

    lrucacheleetcode-DataStructureAndAlgorithm:小算法问题

    字符串中的第一个唯一字符 爬楼梯的最低成本 二叉搜索树的最低公共祖先 二叉树的最低公共祖先 链表循环 回文链表 两个链表的交集 旋转阵列 数素数 丑数 丑二 超级丑数 编码和解码 TinyURL 数组除自身的乘积 将 BST ...

    leetcode316-Algorithm:算法

    这是一个算法问题列表。 力码 LeetCode #1:二和 LeetCode #2:两个数字相加 LeetCode #5:最长回文子串 力扣#15:3Sum LeetCode #20:有效括号 LeetCode #21:合并两个排序列表 LeetCode #24:成对交换节点 ...

    DataStructuresAndAlgorithms:Java中常见的数据结构和算法

    两个堆栈(使用一个数组实现两个堆栈) 双端队列 二叉搜索树 堆(最大和最小堆) 哈希表 常见问题 细绳 判断一个字符串是否有唯一字符 确定两个字符串是否是字谜 堆栈 波兰符号 问题 我的 Java 不是很好,因为我...

    algorithms:不同的数据结构和算法实现

    在每个节点中填充下一个右指针( ) 链接列表周期( ) 搜索插入位置(非O(log(n)算法) Excel工作表列号(简洁算法) 有效括号( ) 同构字符串( ) 计数素数( )( ) 罗马以整数( ...

    anagram-solver:从字典创建字谜类

    编写一个程序,读取由小写字母组成的单词“字典”,每行一个单词,并计算所有字谜类。 例如,单词pots是单词stop的字谜,因为一个单词中的字母是另一个单词中字母的排列。 单词tops 、 opts 、 post和spot属于同一...

Global site tag (gtag.js) - Google Analytics