[各種面試題] 單詞遊戲

一個n*m的字母網格grid,格子中的字母屬於26個大寫字母。選擇某個格子作爲起始點,每一步可以移動到上下左右相鄰的格子中,這樣遍歷經過的字母組成了單詞(每個格子只能訪問一次)。

判斷是否能夠在網格中找到給定的單詞pattern

樣例:

n=3,m=4
Grid:
PACD
BGHI
MNDC

對於pattern = "DCHGB",返回true。
對於pattern = "PBGNDC", 返回true。
對於pattern = "CIDCB",返回false。

就是LeetCode 的 Word Search。

bool travel(vector<vector<char> >& grid,int x,int y,string& pat,int k);
bool exists(vector<vector<char> > &grid, string pattern) {
	int m=grid.size();
	if (m==0)
		return pattern.empty();
	int n=grid[0].size();
	for(int i=0;i<m;i++)
		for(int j=0;j<n;j++)
			if(travel(grid,i,j,pattern,0))
				return true;
	return false;
}
bool travel(vector<vector<char> >& grid,int x,int y,string& pat,int k)
{
	if ( k >=pat.size() )
		return true;
	if ( x<0 ||x>=grid.size()||y<0||y>=grid[0].size())
		return false;
	if (pat[k]!=grid[x][y])
		return false;
	char tmp=grid[x][y];
	grid[x][y]= '#';  //must not exist in pattern
	bool ret= travel(grid,x+1,y,pat,k+1)||travel(grid,x-1,y,pat,k+1)
		||travel(grid,x,y+1,pat,k+1)||travel(grid,x,y-1,pat,k+1);
    grid[x][y]=tmp;
    return ret;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章