leetcode-14-最长公共前缀
生活随笔
收集整理的這篇文章主要介紹了
leetcode-14-最长公共前缀
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:
?
?
解:
請注意,該問題是查找最長公共前綴
一、水平掃描法
package com.example.demo;public class Test14 {/*** 查找字符串數組中最長的公共**前綴**** @param strs* @return*/public String longestCommonPrefix(String[] strs) {//水平掃描法if (strs == null || strs.length == 0) {return "";}String prefix = strs[0];for (int i = 1; i < strs.length; i++) {// 因為查找的各個字符串的前綴,所以A字符串在B字符串中的開頭,不是開頭的話,prefix--,重新查詢,制動為空時結束while (strs[i].indexOf(prefix) != 0) {prefix = prefix.substring(0, prefix.length() - 1);if (prefix.isEmpty()) {return "";}}}return prefix;}public static void main(String[] args) {Test14 t = new Test14();String[] strings = {"abcd", "abc", "ab"};String s = t.longestCommonPrefix(strings);System.out.println(s);} }?
二、分支法
package com.example.demo;public class Test14 {/*** 查找字符串數組中最長的公共**前綴**** @return*/public String longestCommonPrefix1(String[] strs) {//分治法if (strs == null || strs.length == 0) {return "";}return longestCommonPrefix1(strs, 0, strs.length - 1);}/*** 遞歸、分治** @param strs* @param left* @param right* @return*/private String longestCommonPrefix1(String[] strs, int left, int right) {// 遞歸終止條件if (left == right) {// 遞歸的終止條件要選擇好return strs[left];} else {int mid = (left + right) / 2;// 遞歸的思想(不要深入想遞歸內部,只要在宏觀上認為,該遞歸返回的字符串就是left到mid之間的最長公共前綴)String lcpLeft = longestCommonPrefix1(strs, left, mid);String lcpRight = longestCommonPrefix1(strs, mid + 1, right);//將返回的左右兩個最長公共子串進行比較,獲取最終的最長公共前綴return comparePreFix(lcpLeft, lcpRight);}}/*** 比較兩個字符串中的最長前綴** @param lcpLeft* @param lcpRight* @return*/private String comparePreFix(String lcpLeft, String lcpRight) {int len = Math.min(lcpLeft.length(), lcpRight.length());for (int i = 0; i < len; i++) {if (lcpLeft.charAt(i) != lcpRight.charAt(i)) {return lcpLeft.substring(0, i);}}return lcpLeft.substring(0, len);}public static void main(String[] args) {Test14 t = new Test14();String[] strings = {"abcd", "abc", "ab"};String s = t.longestCommonPrefix1(strings);System.out.println(s);} }?
總結
以上是生活随笔為你收集整理的leetcode-14-最长公共前缀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode-16-最接近的三数之和
- 下一篇: leetcde-27-移除元素