华为通用软件开发实习生面试题

技术面手撕代码的原题~

华为通用软件开发实习生面试题_第1张图片
要求用C++写

楼主比较菜面试时候又比较紧张面试官又看着我写,因此当场只写出来一个通用的解法,本以为面试官会让我优化时间复杂度,结果没有,只是测试了一下我的代码,每个测试点都通过了

我的想法是,因为要求最大公共前缀嘛,结果肯定不可能比这些字符串中最短的长,所以首先求出最短的字符串长度假设长度为n,只考虑每个字符串的前n个字符,一来是避免不必要的运算,二来是避免访问字符串的时候数组越界带来不必要的bug,然后以第一个字符串为基准,每次检查剩下所有字符串的第i个字符是否与第一个字符串的第i个相等,如果出现不等,说明之前的i个字符已经不是公共前缀了,直接退出循环取前i-1个字符返回即可

面试时候写的C++代码如下:

#include
#include

using namespace std;

string longestCommonPrefix(vector<string>&strs)
{
     
	int n=strs.size();//字符串个数 
	int min=strs[0].size();
	for(int i=1;i<n;i++)//求最短字符串长度 
	{
     
		if(strs[i].size()<min)
		min=strs[i].size();
	}
	int i=0;
	for(;i<min;i++)
	{
     
		int sign=1;
		char c=strs[0][i];
		for(int j=1;j<n;j++)
		{
     
			if(c!=strs[j][i])
			{
     
				sign=2;
				break;
			}
		}
		if(sign==2)
		break;
	}
	return strs[0].substr(0,i);
}

你可能感兴趣的:(面经,华为,面试,华为,字符串,算法,c++)