1. <?php
    2. class Solution {
    3. public function longestCommonPrefix($strs) {
    4. if (!$strs) return '';
    5. if (count($strs) == 1) return $strs[0];
    6. $minStr = $strs[0];
    7. $minStrLen = strlen($minStr);
    8. foreach ($strs as $k => $str) {
    9. $len = strlen($str);
    10. if ($len <= $minStrLen) {
    11. $minStr = $str;
    12. $minStrLen = $len;
    13. }
    14. }
    15. $left = 1;
    16. $right = $minStrLen;
    17. while ($left <= $right) {
    18. $mid = floor(($right - $left) / 2) + $left;
    19. if ($this->_isPrefix($strs, substr($minStr, 0, $mid))) {
    20. $left = $mid + 1;
    21. } else {
    22. $right = $mid - 1;
    23. }
    24. }
    25. return substr($minStr, 0, min($left, $right));
    26. }
    27. private function _isPrefix($strs, $prefix) {
    28. foreach ($strs as $k => $str) {
    29. if (substr($str, 0, strlen($prefix)) != $prefix) {
    30. return false;
    31. }
    32. }
    33. return true;
    34. }
    35. }
    36. $strs = ['flower', 'flow', 'flight'];
    37. // $strs = ['dog', 'cat', 'apple'];
    38. $cls = new Solution();
    39. $ret = $cls->longestCommonPrefix($strs);
    40. print_r($ret);