关于华为机试题求代码!!!
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