classSolution{int m,n;int[] dx ={0,0,-1,1};int[] dy ={-1,1,0,0};publicvoidsolve(char[][] board){m = board.length;n = board[0].length;//先扫描边界,把不满足题意的连通块变为'.'for(int i =0; i < n; i++){if(board[0][i]=='O')dfs(board,0,i);if(board[m-1][i]=='O')dfs(board,m-1,i);}for(int j =0; j < m; j++){if(board[j][0]=='O')dfs(board,j,0);if(board[j][n-1]=='O')dfs(board,j,n-1);}//最后把'.'改会'o',把'o'改为'X'for(int i =0; i < m; i++)for(int j =0; j < n; j++){if(board[i][j]=='O')board[i][j]='X';elseif(board[i][j]=='.') board[i][j]='O';}}privatevoiddfs(char[][] board,int i,int j){board[i][j]='.';for(int k =0; k <4; k++){int x = dx[k]+ i;int y = dy[k]+ j;if(x >=0&& x < m && y >=0&& y < n && board[x][y]=='O'){dfs(board,x,y);}}}}