1. 程式人生 > 其它 >14. 最長公共字首

14. 最長公共字首

技術標籤:LeetCode

14. 最長公共字首

題目描述

編寫一個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""

示例1
輸入:strs = ["flower","flow","flight"]
輸出:"fl"
示例2
輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共字首。
提示:
  • 0 ≤ s t r s . l e n g t h ≤ 200 0 \le strs.length \le 200
    0strs.length200
  • 0 ≤ s t r s [ i ] . l e n g t h ≤ 200 0 \le strs[i].length \le 200 0strs[i].length200
  • strs[i] 僅由小寫英文字母組成

題解:

列舉 strs[0] 的每個字元,然後判斷 strs[1...n-1] 對應位的字元是否相等。

  • 不相等應立即退出迴圈,此時該字元不可能是公共字首
  • 列舉的位置超過某個字串的長度也應退出迴圈

時間複雜度: O ( m i n { l e n ( s t r s [ 0... n − 1 ] ) } ∗ n ) O(min\{len(strs[0...n-1])\} * n)

O(min{len(strs[0...n1])}n)

額外空間複雜度: O ( 1 ) O(1) O(1)

程式碼:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if ( !strs.size() ) return "";
        string ret = "";
        char ch;
        bool flag;
        int len = 0;
        for
( int i = 0; i < strs[0].size(); ++i ) { ch = strs[0][i]; flag = true; for ( int j = 1; j < strs.size(); ++j ) { if ( !(strs[j].size() > i && strs[j][i] == ch) ) { flag = false; break; } } if ( !flag ) break; else ++len; } return strs[0].substr(0, len); } }; /* 時間:4ms,擊敗:92.30% 記憶體:8.9MB,擊敗:99.39% */