题目链接如下: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; } };