7
A
回答
-2
使用二進制搜索。嘗試比較整個字符串。如果他們不相同,嘗試比較第一個字符。如果他們是平等的嘗試拆分字符串(substring(0, str.length()/2
)。等等
1
public class Test{
public static void main(String[] args){
String s1 = "Mary Had a Little Lamb";
String s2 = "Mary Had a Big Lamb";
int minStrLen = s1.length();
if (minStrLen > s2.length()){
minStrLen = s2.length();
}
StringBuilder output = new StringBuilder();
for(int i=0; i<minStrLen; i++){
if (s1.charAt(i) == s2.charAt(i)){
output.append(s1.charAt(i));
}else{
break;
}
}
System.out.println(output.toString());
}
}
這可能不是最佳的解決方案,但這很容易理解和編程。
我借用了merge-sort算法列表合併技術的這個思路。如果你對列表合併技術閱讀不多,你會更好地理解我的算法的邏輯。
+1
你不需要一個StringBuilder,只需返回子字符串。看我的解決方案。 – dyross
1
String str1;
String str2;
// assuming str1.length > str2.length
- a.startsWith(二)==真 如果不是
- 在一個循環中保持從步驟str1和重複檢查刪除最後一個字符1.
26
你不需要使用StringBuilder
- 只返回字符串:
public String greatestCommonPrefix(String a, String b) {
int minLength = Math.min(a.length(), b.length());
for (int i = 0; i < minLength; i++) {
if (a.charAt(i) != b.charAt(i)) {
return a.substring(0, i);
}
}
return a.substring(0, minLength);
}
1
該解決方案適用於多種STRI ng數組。當你有3或4個字符串時,最好使用StringBuilder。對於2個字符串,可以使用子字符串。在C#中的代碼:
public string LongestCommonPrefix(string[] strs) {
if(strs.Length == 0) return string.Empty;
Array.Sort(strs);
var first = strs[0];
var last = strs[strs.Length - 1];
var sb = new StringBuilder();
for(int i = 0; i< first.Length; i++)
{
if(first[i] != last[i])
{
break;
}
sb.Append(first[i]);
}
return sb.ToString();
}
+0
你爲什麼使用生成器?對索引進行操作並將子字符作爲結果應該足夠了。 –
相關問題
- 1. 最長共同前綴屬性
- 2. 最長公共後綴前綴
- 3. 最長共同後綴
- 4. 查找三元搜索樹中最長的公共前綴
- 5. Haskell中最長的公共前綴
- 6. Java String-Collection:最長的公共前綴
- 7. 最長前綴後綴
- 8. 尋找滑動窗口中最長公共前綴的算法
- 9. 找到最長的字符串前綴
- 10. 用於搜索最長公共前綴的SQL查詢
- 11. 通用後綴樹遍歷查找最長公共子串
- 12. 最長前綴匹配
- 13. 搜索最長的前綴
- 14. 最長的迴文前綴
- 15. 找到最長的共同序列
- 16. 使用緩衝區的最長公共前綴?
- 17. bash中兩個字符串的最長公共前綴
- 18. Perl - 2個或更多字符串的最長公共前綴?
- 19. 所有後綴的最長前綴字符串長度
- 20. 爪哇 - 通過共同的長度和前綴
- 21. 查找也是後綴的前綴
- 22. Trie最長的前綴匹配
- 23. 漸進搜索最長前綴
- 24. SQL最長前綴字符串
- 25. 最長前綴匹配路由表
- 26. 最長的迴文前綴Complextity
- 27. 最長的IPv6前綴匹配
- 28. 使用map/reduce找到最短的唯一前綴長度
- 29. 找到包含在字典中的最長前綴
- 30. 爲什麼我們不使用前綴樹(trie)來查找最長的公共子字符串?
如果通用前綴是n,則無論如何您都需要比較前n個字符。進行二分查找是過度的,可能會導致額外的比較。 – dyross