题目链接:http://www.topcoder.com/stat?c=problem_statement&pm=10395&rd=13747 这个题目比较简单,主要是看循环循序不同对算法效率的影响 one: #include<string> #include<vector> using namespace std; struct SquareOfDigits { int min(int a,int b) { return a<b?a:b; } int getMax(vector<string> data) { int i,j,k; int size=min(data.size(),data[0].size()); for(k=size;k>1;k--) { for(i=0;i+k-1<data.size();i++) for (j=0;j+k-1<data[i].size();j++) { if(data[i][j]==data[i+k-1][j+k-1]&&data[i][j]==data[i+k-1][j]&&data[i][j]==data[i][j+k-1]) return k*k; } } return 1; } }; two: #include<string> #include<vector> #include<iostream> using namespace std; struct SquareOfDigits { int min(int a,int b) { return a<b?a:b; } int getMax(vector<string> data) { int size = min(data.size(),data[0].size()); int ans = 1; for(int i=0;i<data.size();i++) for(int j=0;j<data[i].size();j++) { for(int len=min(data.size()-i,data[i].size()-j);len>ans;len--) { if(data[i][j]==data[i+len-1][j+len-1]&&data[i][j]==data[i+len-1][j]&&data[i][j]==data[i][j+len-1]) {ans=len;break;} } } return ans*ans; } };