网格找单词

在一个网格中使用已知的单词表将所有出现在单词表中的单词都找出来

代码如下

//使用Java编写

import java.util.ArrayList;
import java.util.TreeSet;
public class 网格找单词 {
	//存储要找单词的集合
	static TreeSet<String> ts=new TreeSet<String>();
	//字母网格
	static char[][] word={
			{'t','h','i','s'},
			{'w','a','t','s'},
			{'o','a','h','g'},
			{'f','g','d','t'}
	};
	//用来添加一个个字母,组成单词
	static StringBuilder sb=new StringBuilder();
	//保存坐标信息
	static StringBuilder sbCoor=new StringBuilder();
	//保存已经找到的单词的坐标信息和单词
	static ArrayList<String> CoorAndWord=new ArrayList<String>();
	public static void main(String[] args){
		//添加要找的单词
		ts.add("that");
		ts.add("this");
		ts.add("two");
		ts.add("fat");
		for(int i=0;i<word.length;i++)
			for(int j=0;j<word[0].length;j++)
				for(int x=-1;x<=1;x++)
					for(int y=-1;y<=1;y++){
						if(x==0 && y==0)
							continue;
						if(0<=i+x && 0<=j+y && i+x<word[0].length && j+y<word.length)
							findWord(i,j,x,y);
						//清空,从新用
							sb=new StringBuilder();
							sbCoor=new StringBuilder();
						}
		//输出找到的结果
		System.out.println(CoorAndWord);
	}
	public static void findWord(int bx,int by,int x,int y){
		sb.append(word[bx][by]);
		sbCoor.append("("+bx+","+by+")");
		if(ts.contains(sb.toString()))//如果要找的单词表包含sb的内容,就将坐标信息和单词保存起来
			CoorAndWord.add(sbCoor.toString()+"-->"+sb.toString());	
		if(0<=bx+x && 0<=by+y && bx+x<word[0].length && by+y<word.length)
			findWord(bx+x,by+y,x,y);
	}
}


以上运行结果输出

[(0,0)(0,1)(0,2)(0,3)-->this, (0,0)(1,0)(2,0)-->two, (3,0)(2,1)(1,2)-->fat, (3,3)(2,2)(1,1)(0,0)-->that]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值