LeetCode No14 最長公共字首
阿新 • • 發佈:2022-04-19
題目
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 ""。
示例 1:
輸入:strs = ["flower","flow","flight"]
輸出:"fl"
示例 2:
輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共字首。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 僅由小寫英文字母組成
思路
行遍歷
要求公共字首,可以先求第一個字串和第二個字串的公共字首s,然後再用s去和第三個字串求一次公共字首並重新賦給s,以此類推,直至字元陣列結束。
列遍歷
字串陣列可以看成是一個字元矩陣,可以按照行掃描,也可以按照列去掃描。
AC程式碼
行遍歷
點選檢視程式碼
class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) { return ""; } String prefix = strs[0]; int count = strs.length; for (int i = 1; i < count; i++) { prefix = longestCommonPrefix(prefix, strs[i]); if (prefix.length() == 0) { break; } } return prefix; } public String longestCommonPrefix(String str1, String str2) { int length = Math.min(str1.length(), str2.length()); int index = 0; while (index < length && str1.charAt(index) == str2.charAt(index)) { index++; } return str1.substring(0, index); } }
列遍歷
點選檢視程式碼
class Solution { public String longestCommonPrefix(String[] strs) { if( strs.length == 0 ) { return ""; } char[][] chars = new char[205][205]; StringBuilder sb = new StringBuilder(); int row = 0; int col = 205; int len = 0; for(String str : strs) { chars[row++] = str.toCharArray(); col = Math.min(col, str.length()); } for(int i=0; i<col; i++) { char ch = chars[0][i]; boolean flag = true; for(int j=0; j<row; j++) { if( ch!=chars[j][i] ) { flag = false; break; } } if( flag ) { sb.append(ch); } else { break; } } return sb.toString(); } }