华为电脑c语言总是错误,关于华为机试题求代码!解决方法

关于华为机试题求代码!!!

n个字符串,1

如n=3

1.what is local bus?

2.this is local bus。

3.local bus is name sdhfj。

那么最长的共同子串是local bus

函数为char * findchar(const char**asd,const int n)

大体就是这些,用c去实现!!

大牛们 给力啊!!

------解决方案--------------------

这样:先比较两个字符串, 找出所有互不包含的公共子串。

然后这堆子串再与第三个字符串相比,找出新的公共字串,,,

最后选出最长的那个。

------解决方案--------------------

先两个字符串找 公共子串 。

然后拿公共子串和下一个字符串找 公共子串

往复循环,最后剩下的 公共子串 中找最长的 子串 返回。

最后没有剩下公共子串则返回NULL。

个人想法,估计这个贴会火,来顶一个..

------解决方案--------------------

1、计算出 n 个字符串中最短的字符串a 的长度l, pos=0,len=l/2, n=1

2、从字符串a 的pos 位置取长度len 个字节

3、判断步骤2中的字节是否在其他n-1个字符串中

4、是,判断l/2^n是否为0,是,结束;否,len+=l/2^n,n++,回步骤2

5、否,判断pos>l-len,是,len-=l/2^n,n++,pos=0,回步骤2;否,pos++,回步骤2

6、从字符串a 的pos 位置取长度len 个字节作为返回值

------解决方案--------------------

既然每个字符串都包含最长子字符串

1\选择 第1个和第2个字符串得到 最长子字符串a

2\选择 第3个和第4个字符串得到 最长子字符串b

3\从a b中得到最大子字符串c

4\选择 第5个和第6个字符串得到 最长子字符串d

5\选择 第7个和第8个字符串得到 最长子字符串e

6\从d e中得到最大子字符串f

从c f中得到子字符串。。。。g

。。。。。。。。。。。。。。。。。。。。。

------解决方案--------------------

引用:引用:

先两个字符串找 公共子串 。

然后拿公共子串和下一个字符串找 公共子串

往复循环,最后剩下的 公共子串 中找最长的 子串 返回。

最后没有剩下公共子串则返回NULL。

个人想法,估计这个贴会火,来顶一个..

顶,只要写出针对两个串求最长公共串的代码,剩下就是循环的问题了,当然,可能有出现有多个一样长的公共串的情况,处理应该也不太复杂。

如果是下面的情况,8楼的思路就会出问题

str1="main is a local bus"

str2="main not a local bus"

str3="main"

第一个和第二个比较会结果就是"a local bus",如果拿这个和第三个比较,结果就完全不同了。

所以比较来看应该是n个字符串同时进行比较。不能两两比较后,再和其他进行比较。

------解决方案--------------------

手上只有一个Python版的,LZ自己改成C++吧

values = [1,-2,3,10,-4,7,2,-5]

def getMaxSum(values):

maxSum = 0

sum = 0

maxNegativeNum = values[0]

if not values:

return None

for value in values:

sum = sum + value

if maxNegativeNum 

maxNegativeNum = value

if sum 

sum = 0

if sum > maxSum:

maxSum = sum

if sum == 0:

return maxNegativeNum

return maxSum

------解决方案--------------------

#include 

#include 

using namespace std;

//将第一个字符串与最短的字符串交换

void swap(string *pStr,int i)

{

string temp;

temp = *pStr;

*pStr = *(pStr + i);

*(pStr + i) = temp;

}

int main()

{

int N = 3;

//cout <

//cin >> N;

//cout <

string *pStr;

pStr = new string [N];//记录要查找的字符串

pStr[0] = "main what is local bus";

pStr[1] = "main this is local bus";

//pStr[2] = "local bus is name sdhfj";

pStr[2]  = "main";

int i,min;

int maxLen = 256;

//找出输入的字符串中长度最小的串,并把最小串序号记在min中

for(i = 0; i 

// cin >> *(pStr + i);

int len = (*(pStr +i)).length();// *操作符与调用函数的.操作符优先级问题,.优先级高于*,所以必须加上()

if(len 

maxLen = len;

min = i;

}

}

swap(pStr,min);

/*

for(i = 0; i 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值