class Solution { public: int maximalRectangle(vector<vector<char> > &matrix) { // Start typing your C/C++ solution below // DO NOT write int main() function int maxArea = 0; for (int i = 0; i < matrix.size(); i++) { vector<char> curLine = matrix[i]; bool metOne = false; int leftPos = 0; int rightPos = 0; for (int j = 0; j <= curLine.size(); j++) { if (curLine[j] == '0' || j == curLine.size()) { if (metOne == true) { metOne = false; rightPos = j-1; for (int leftEdge = leftPos; leftEdge <= rightPos; leftEdge++) { int curLineArea = rightPos-leftEdge+1; int curArea = curLineArea; for (int k = i+1; k < matrix.size(); k++) { int pos; for (pos = leftEdge; pos <= rightPos; pos++) { if (matrix[k][pos] == '0') { break; } } if (pos == rightPos+1) { curArea += curLineArea; } else { break; } } for (int k = i-1; k >= 0; k--) { int pos; for (pos = leftEdge; pos <= rightPos; pos++) { if (matrix[k][pos] == '0') { break; } } if (pos == rightPos+1) { curArea += curLineArea; } else { break; } } if (curArea > maxArea) { maxArea = curArea; } } } else { continue; } } else if (curLine[j] == '1') { if (metOne == false) { metOne = true; leftPos = j; } } } } return maxArea; } };
尽管这个算法通过了测试,但是感觉性能不是很好