数据结构与算法分析 第一章课后习题答案第2题
一、问题描述:
二、解题思路:(针对的是字典不太大的情况)
1、单词表中的每个单词均可以用一个四元组(行,列,方向,长度)表示;
2、其中方向可分为四种:水平(包括向左、向右)、竖直(包括向上、向下)、右下(包括右下、左上)、左下(包括左下、右上);
3、找出每个方向上的最长字符串,以水平方向(向右)为例,最长字符串为:this,wats,oahg,fgdt;
4、如果3中的字符串包含或者等于用户提供的单词,则字谜中出现了该单词。
三、编程实现:
1、代码:
package exercise_1;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
public class Exercise02 {
introws=0; //数组的行数
intcols=0; //数组的列数
chararr[][];//二维数组
Stringwords[];//用户输入的词汇
HashSet<String>strSet=new HashSet<String>();//用来存放字谜中出现的长串单词
ArrayList<String>result=new ArrayList<String>();//存放字谜中匹配到的单词
/**
* 功能:得到用户输入的二维字母数组及一组单词
*/
publicvoid input(){
Scannersc=new Scanner(System.in);
//数组的初始化
System.out.println("Enterrows of the array:");
rows=Integer.parseInt(sc.next());//获取数组的行数
System.out.println("Entercols of the array:");
cols=Integer.parseInt(sc.next());//获得数组的列数
intlen=rows*cols;
arr=newchar[rows][cols];
System.out.println("Enter"+rows*cols+" chars,seperated