在一个网格中使用已知的单词表将所有出现在单词表中的单词都找出来
代码如下
//使用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]