字符串處理 最長(zhǎng)公共前綴

2020-06-16 11:34 更新

題目

難度 :簡(jiǎn)單

編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長(zhǎng)公共前綴。

如果不存在公共前綴,返回空字符串 ""。

示例 1:

  1. 輸入: ["flower","flow","flight"]
  2. 輸出: "fl"

示例 2:

  1. 輸入: ["dog","racecar","car"]
  2. 輸出: ""
  3. 解釋: 輸入不存在公共前綴。

說明:

所有輸入只包含小寫字母 a-z 。

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/longest-common-prefix

解析一、首先是強(qiáng)硬的一一比對(duì)

  1. func longestCommonPrefix(strs []string) string {
  2. if len(strs) == 0 {
  3. return ""
  4. }
  5. for i := 0; i < len(strs[0]); i++ {
  6. for j := 1; j < len(strs); j++ {
  7. if i == len(strs[j]) || strs[j][i] != strs[0][i] {
  8. return strs[0][:i]
  9. }
  10. }
  11. }
  12. return strs[0]
  13. }

解析二、分步

先找出數(shù)組中字典序最小和最大的字符串,最長(zhǎng)公共前綴即為這兩個(gè)字符串的公共前綴

  1. class Solution {
  2. public:
  3. string longestCommonPrefix(vector<string>& strs) {
  4. if(strs.empty()) return "";
  5. // c++17 結(jié)構(gòu)化綁定
  6. // str0, str1 分別是一個(gè) pair<string, string> 的 first 和 second
  7. const auto [str0, str1] = minmax_element(strs.begin(), strs.end(),
  8. [](const string& str0, const string& str1){return str0 < str1;});//賦予最大最小值
  9. for(int i = 0; i < str0->size(); ++i)
  10. if(str0->at(i) != str1->at(i)) return str0->substr(0, i);//截取字符串
  11. return *str0;
  12. }
  13. };

1.minmax_element()函數(shù)

接受一個(gè)序列的區(qū)間作為參數(shù),查找其中第一次出現(xiàn)的最大最小值,并以std::pair的形式返回其迭代器(注意不是值,也不是tuple)。

  1. vector<int>v ={633,90,67,83,2,100};
  2. auto Xminmax_elementv.begin(),v.end());
  3. cout<<int>"min<<*x.first << endl;
  4. cout<<"max<<*x.second <<endl

程序的運(yùn)行結(jié)果如下:

  1. min2
  2. max633

minmax_element()的使用風(fēng)格與標(biāo)準(zhǔn)庫的算法是一致的,需要注意的就是它的返回值,一個(gè)迭代器的pair,因此必須用first和second來訪問指向最小最大值的迭代器,并用解引用操作符“*”來獲取值。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)