前言
解题思路及代码
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Solution {
private:
bool isWin(const vector<string>& board, char c)
{
for (int i = 0; i < 3; ++i)
{
if ((c == board[i][0] && c == board[i][1] && c == board[i][2])
|| (c == board[0][i] && c == board[1][i] && c == board[2][i]))
{
return true;
}
}
if ((c == board[0][0] && c == board[1][1] && c == board[2][2])
|| (c == board[0][2] && c == board[1][1] && c == board[2][0]))
{
return true;
}
return false;
}
public:
bool validTicTacToe(vector<string>& board) {
int cntX = 0;
int cntO = 0;
for (const string& s : board)
{
for (char c : s)
{
if (c == 'X')
{
++cntX;
}
else if (c == 'O')
{
++cntO;
}
}
}
if (cntX != cntO && cntX != cntO+1)
{
return false;
}
if (isWin(board, 'X') && cntX != cntO+1)
{
return false;
}
if (isWin(board, 'O') && cntX != cntO)
{
return false;
}
return true;
}
};
int main(){
vector<string> board;
string aRow;
for(int i=0;i<3;i++){
getline(cin,aRow);
board.push_back(aRow);
}
bool res = Solution().validTicTacToe(board);
cout<<(res?"true":"false")<<endl;
return 0;
}