Untitled
unknown
plain_text
3 years ago
3.3 kB
10
Indexable
class Solution {
public:
bool canPlaceHor(string& word, vector<vector<char>>& board, int i, int j){
if (j - 1 >= 0 && board[i][j - 1] != '#'){
return false;
}
if (j + word.length() < board[0].size() && board[i][j + word.length()] != '#'){
return false;
}
for (int jj = 0; jj<word.length(); jj++){
if (j + jj >= board[0].size()){
return false;
}
if (board[i][j + jj] == ' ' || board[i][j + jj] == word[jj]){
continue;
}else{
return false;
}
}
return true;
}
bool canPlaceHorRev(string& word, vector<vector<char>>& board, int i, int j){
if (j + 1 < board[0].size() && board[i][j + 1] != '#'){
return false;
}
if (j - word.length() >= 0 && board[i][j - word.length()] != '#'){
return false;
}
for (int jj = 0; jj<word.length(); jj++){
if (j - jj < 0){
return false;
}
if (board[i][j - jj] == ' ' || board[i][j - jj] == word[jj]){
continue;
}else{
return false;
}
}
return true;
}
bool canPlaceVer(string& word, vector<vector<char>>& board, int i, int j){
if (i - 1 >= 0 && board[i - 1][j] != '#'){
return false;
}
if (i + word.length() < board.size() && board[i + word.length()][j] != '#'){
return false;
}
for (int ii = 0; ii<word.length(); ii++){
if (i + ii >= board.size()){
return false;
}
if (board[i + ii][j] == ' ' || board[i + ii][j] == word[ii]){
continue;
}else{
return false;
}
}
return true;
}
bool canPlaceVerRev(string& word, vector<vector<char>>& board, int i, int j){
if (i + 1 < board.size() && board[i + 1][j] != '#'){
return false;
}
if (i - word.length() >= 0 && board[i - word.length()][j] != '#'){
return false;
}
for (int ii = 0; ii<word.length(); ii++){
if (i - ii < 0){
return false;
}
if (board[i - ii][j] == ' ' || board[i - ii][j] == word[ii]){
continue;
}else{
return false;
}
}
return true;
}
bool canPlace(string& word, vector<vector<char>>& board, int i, int j){
return canPlaceHor(word, board, i, j) || canPlaceHorRev(word, board, i, j) || canPlaceVer(word, board, i, j) || canPlaceVerRev(word, board, i, j);
}
bool placeWordInCrossword(vector<vector<char>>& board, string word) {
int n = board.size();
int m = board[0].size();
bool ans = false;
for (int i = 0; i<n; i++){
for (int j = 0; j<m; j++){
if (board[i][j] != '#'){
ans = ans || canPlace(word, board, i, j);
}
}
}
return ans;
}
};Editor is loading...