本人从事C++开发工作8年了,今天做了一套华为软件编程测试题目
竟然没有在规定的时间内提交,这让我自己都觉得很突然,难道我的编程基础尽然这么差了吗
工作中,一直从事的是做linux系统后台开发,服务器段的开发,一直很侧重业务层的开发
平时学习开源的代码也都是看为主,然后学习和修改开源的代码,提升自己的能力
一直都觉得自己的C++基础还可以
但是今天做了一个题目,才发现,自己工作了这么久,很多的东西丢掉了,很多思维被自己僵化了
题目很简单: 就是 输入一个字符串, 输出最长的有效括号子串长度
有效括号子串,实例如下:()(()()( 输出长度,为4
而如果中间有((a))其他的字符,就不算是子串
很简单一个题目,我花了将近2个多小时才调出来,前面一个多小时,一点思路都没有,代码呢没有经过优化
int getMaxSize(string &szStr)
{
if (szStr.empty())
{
return 0;
}
int maxLen = 0; //当前字符串括号的长度
if (szStr.size() <= 1)
{
return 0;
}
int CurLen = 0;
int iClen = 0;
int iCurDepth = 0;
char* sz = new char[szStr.size()+1];
strncpy(sz,szStr.c_str(), szStr.size());
sz[szStr.size()] = 0;
for (int i = 0; i < szStr.size(); ++i)
{
if (sz[i] == '(')
{
iCurDepth = 1;
iClen = 0;
int j = i+1;
for (; j < szStr.size(); ++j)
{
if (sz[j] == ')')
{
iCurDepth -= 1;
if (iCurDepth == 0)
{
iClen += j-i+1;
CurLen += iClen;
i = j;
break;
}
}
else if (sz[j] == '(')
{
iCurDepth += 1;
}
else
{
break;
}
}
if (j == szStr.size() && iCurDepth > 0)
{
if (iClen > maxLen)
{
maxLen = iClen;
}
iClen = 0;
CurLen = 0;
}
}
else
{
if (CurLen > maxLen)
{
maxLen = CurLen;
}
CurLen = 0;
}
if (CurLen > maxLen)
{
maxLen = CurLen;
}
}
if (CurLen > maxLen)
{
maxLen = CurLen;
}
delete sz;
return maxLen;
}
这种情况下,我该怎么补回来呢
只能天天练习,学习一些基础的东西
让自己实时的保持编码的状态吗?该怎么让自己提升呢?