华为在线编程题目测试让自己惊醒

本人从事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;
}

这种情况下,我该怎么补回来呢

只能天天练习,学习一些基础的东西

让自己实时的保持编码的状态吗?该怎么让自己提升呢?

 

你可能感兴趣的:(C++)