題目鏈接如下:Leetcode 14
大致描述一下題目:
題目給出一個字符串數組,編寫一個函數找出最長公共前綴,如果沒有,返回空
解題思路:
基本上有兩個思路:橫向掃描和縱向掃描
假設我們有一個str[ ]數組,"flow" "flower" "flight"
橫向掃描就是遍歷所有字符串,先假設目標字串爲str[0],然後和下一個字符串每個字符逐一比較,當遇到不一樣的元素用substr截取保存爲目標子串,然後再去與下一個字符串比較。
縱向掃描對所有字符串str[i][0],str[i][1]這樣一個一個比較過去,遇到不一樣的,則返回str[i][j]。
附上代碼如下(C++):[橫向掃描]
/*******************************************************************************
Copyright © 2018-20xx Qiao Chuncheng, All Rights Reserved.
File name: 014[最長公共前綴].cpp
Author: Qiao Chuncheng
Version: v1.0
Date: 2018-04-11
*******************************************************************************/
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() == 0)//樣例數據就是空的Vector
return "";
string tempStr = strs[0];
for (size_t i = 1; i < strs.size(); i++)
{
if (tempStr.size() == 0 || strs[i].size() == 0)
return "";
size_t len = strs[i].size() > tempStr.size() ? tempStr.size() : strs[i].size();
size_t j;
for (j = 0; j < len; j++)
{
if (tempStr[j] != strs[i][j])
{
//tempStr = strs[i].substr(0, j);
break;
}
}
tempStr = strs[i].substr(0, j);//單步調試發現這個需要在循環外
}
return tempStr;
}
};