題目:最長公共字首
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 ""。
複製程式碼
示例:
輸入: ["flower","flow","flight"]
輸出: "fl"
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共字首。
複製程式碼
思考:
取字串陣列中第一個字串,當作是最長公共字首.
然後從第二個字串開始迴圈,比較其中是否存在字串一,如果不存在就將字串一截短一位。
直至找到在所有字元傳中都存在的最長字首。如果直至字串一被截到長度為0還沒有找到,則說明沒有最長公共字首返回“”。
複製程式碼
實現:
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
//字串一
String prefix = strs[0];
//從下標為1開始迴圈字串陣列
for (int i = 1; i < strs.length; i++) {
//不等於0說明不存在或者不是字首
while (strs[i].indexOf(prefix) != 0) {
//截掉字串最後一位
prefix = prefix.substring(0, prefix.length() - 1);
if (TextUtils.isEmpty(prefix)) {
return "";
}
}
}
return prefix;
}
}
複製程式碼
再思考:
還可以一位一位比較,同樣是迴圈取第一個字串的第i個字元,與字串陣列中其他的字串的第i個字元比較。
直至找到與字串一第i個字元出現不相同或者i已經超過了某個字串的長度為止。
此時字串一從0到i個字元就是最長公共字首。
複製程式碼
再實現:
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {return ""};
for (int i = 0; i < strs[0].length(); i++) {
//迴圈取第一個字串的第i個字元
char charAt = strs[0].charAt(i);
//從下標為1開始迴圈字串陣列
for (int j = 1; j < strs.length; j++) {
//比較字串一的第i位與其他字串的第i為是否相同
//長度i是否已經超過字串的長度或者出現不相同說明最長字串到此為止
if (i == strs[j].length() || strs[j].charAt(i) != charAt)
{
return strs[0].substring(0, i);
}
}
}
return strs[0];
}
}複製程式碼