#include<stdafx.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Solution{
public:
bool charExist(string word,int len,vector<vector<char>> &board,int row,int col){
}
bool partExist(string word,int len,vector<vector<char>> &board,int row,int col){
cout<<len<<row<<col<<endl;
bool flag=false;
if(len==0){
return true;
}
if(row-1>=0&&word[len-1]==board[row-1][col]){
char tmp=board[row-1][col];
board[row-1][col]='0';
flag=flag||partExist(word,len-1,board,row-1,col);
board[row-1][col]=tmp;
}
if(row+1<board.size()&&word[len-1]==board[row+1][col]){
char tmp=board[row+1][col];
board[row+1][col]='0';
flag=flag||partExist(word,len-1,board,row+1,col);
board[row+1][col]=tmp;
}
if(col-1>=0&&word[len-1]==board[row][col-1]){
char tmp=board[row][col-1];
board[row][col-1]='0';
flag=flag||partExist(word,len-1,board,row,col-1);
board[row][col-1]=tmp;
}
if(col+1<board[0].size()&&word[len-1]==board[row][col+1]){
char tmp=board[row][col+1];
board[row][col+1]='0';
flag=flag||partExist(word,len-1,board,row,col+1);
board[row][col+1]=tmp;
}
return flag;
}
bool exist(vector<vector<char> > &board, string word) {
bool flag=false;
for(int i=0;i<board.size();i++){
for(int j=0;j<board[0].size();j++){
if(board[i][j]==word[word.length()-1]){
//cout<<i<<j<<endl;
board[i][j]='0';
flag=flag||partExist(word,word.length()-1,board,i,j);
board[i][j]=word[word.length()-1];
}
}
}
return flag;
}
};
int main(){
vector<vector<char>> board;
vector<char> v(2,'a');
board.push_back(v);
string word="aaa";
Solution s;
cout<<s.exist(board,word);
cin>>word;
}
大的测试集超时,想法,递归,上下左右查找。