LeetCode-14. 最長公共字首
14. 最長公共字首
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 ""
。
示例 1:
輸入: ["flower","flow","flight"] 輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"] 輸出: "" 解釋: 輸入不存在公共字首。
說明:
所有輸入只包含小寫字母 a-z
。
#include<bits/stdc++.h>
using namespace std;
/********************提交程式碼********************/
char* longestCommonPrefix(char** strs, int strsSize)
{
if(strsSize==0||(*strs==0x0))//判斷是否空串
return "";
if(strsSize==1)//判斷是否僅一個串
return strs[0];
int i=0,j=0,k=1,cnt=0,len,maxlen=0x3f3f3f3f;
char *ans=(char*)malloc(1529*sizeof(char));//可改為更大的數值,因為1529為二分嘗試提交後發現最小能AC的單串長度
for(i=0; i<strsSize; ++i)//計算最小串的長度,即最長遍歷長度
{
len=strlen(strs[i]);
if(len<maxlen)//不支援min方法
maxlen=len;
}
if(maxlen==0)//含有空串
return "";
for(i=0; i<strsSize-1; ++i)//遍歷第i個和第i+1個串的第j個字元
{
if(strs[i][j]==strs[i+1][j])
++k;
if(i==strsSize-2)//所有串的第j個字元便歷完畢
{
if(k==strsSize)//所有串的第j個字元都相同
ans[cnt++]=strs[i][j];
else if(j==0)//首字母都不相同
return "";
++j;//準備遍歷第j+1個字元
i=-1;
k=1;//預設自己為1個相同位
}
if(j>maxlen)//截止到最長遍歷長度
break;
}
if(cnt==0)//未獲取到公共串
return "";
return ans;
}
/***************************************************/
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("F:/cb/read.txt","r",stdin);
//freopen("F:/cb/out.txt","w",stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int strsSize;
while(cin>>strsSize)
{
char** strs=(char**)calloc(2000,sizeof(char*));
for (int i=0; i<2000; ++i)
strs[i]=(char*)calloc(2000,sizeof(char));
cin.getline(strs[0],2000);
for(int i=0; i<strsSize; ++i)
{
cin.getline(strs[i],2000);
//cout<<"/"<<strs[i]<<"/"<<endl;
}
cout<<"/"<<longestCommonPrefix(strs,strsSize)<<"/"<<endl;
free(strs);
}
return 0;
}
思路非常簡單:遍歷判斷每個串的每位是否相同。
但是是極其噁心的一道題,因為最大串的長度未知(ヽ(`Д´)ノ︵ ┻━┻ ┻━┻ 要是ACM的題目肯定不會出現這種不告知資料範圍的毛病),我一開始開到了1000但是WA後來開到2000就AC了所以賊浪費時間找bug賊生氣!
所以!!本題當前(20180430/00:11)測試用例來說能AC的最大串的長度的最小是1529!!
( • ̀ω•́ )✧不過順便回顧了一下二級指標還有一些字元陣列指標的初始化什麼的還是挺開心的~~
附測試用例:
2
2
cba
1
abc
3
a
ac
3
dog
racecar
car
3
flower
flow
flight
相關文章
- 最長公共字首
- LeetCode最長公共字首(Python)LeetCodePython
- 14.最長公共字首
- 14. 最長公共字首
- 力扣最長公共字首力扣
- 14_最長公共字首
- 每日leetcode——最長公共字首LeetCode
- 演算法:最長公共字首演算法
- LeeCode 14. 最長公共字首
- leetcode14.最長公共字首LeetCode
- #LeetCode14. 最長公共字首 @FDDLCLeetCode
- 每日一練(35):最長公共字首
- 力扣 14. 最長公共字首力扣
- 演算法之字串——最長公共字首演算法字串
- LeetCode——python3最長公共字首——2020.11.24LeetCodePython
- LeetCode每日一題:最長公共字首(No.14)LeetCode每日一題
- LeetCode - 014 - 最長公共字首(longest-common-prefix)LeetCode
- leetcode爬坑史(一)-- [14] 最長公共字首LeetCode
- ABC353E字典樹處理最長公共字首
- 2020-10-31 最長公共字首【簡單題14】
- 讓我們一起啃演算法----最長公共字首演算法
- 【完虐演算法】「字串-最長公共字首」5種方法腦洞大開演算法字串
- 最長公共子序列
- 最長公共子序列(JAVA)Java
- lCS(最長公共子串)
- 面試題:編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。(c++實現)面試題函式字串陣列C++
- 最長公共子序列求方案數
- java 實現 最長公共子序列Java
- 最長公共子序列 Longest Common Subsequence
- 線性dp:最長公共子串
- 線性dp:最長公共子序列
- LeetCode 1143.最長公共子序列LeetCode
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 測試開發工程師的每日演算法-Leecode 演算法題目第 14. 最長公共字首工程師演算法
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 最長公共子序列LCS 輸出所有LCS
- 51Nod 1006 最長公共子序列Lcs