华为电脑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?
總結
以上是生活随笔為你收集整理的华为电脑c语言总是错误,关于华为机试题求代码!解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32f429vref怎么接_STM
- 下一篇: 如何从一张图片里取出其中一部分_如何鉴别