java中空串 “”!=null..字串要用equals判等
阿新 • • 發佈:2019-01-31
自己寫測試用例,區別:字串為 空串“ ”,空物件null 。
3.2 Implement strStr()
描述
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
分析
暴力演算法的複雜度是O(m n),程式碼如下。更高效的的演算法有KMP 演算法、Boyer-Mooer 演算法和
Rabin-Karp 演算法。面試中暴力演算法足夠了,一定要寫得沒有BUG。
暴力匹配
// LintCode, Implement strStr()
// 暴力解法,時間複雜度O(N*M),空間複雜度O(1)
</pre><p><pre name="code" class="java">package leetCode; public class strstr { public static int strStrMy(String source, String target) { if (source == null || target == null) { return -1; } else if (target.equals("")) {//target空串""!=null.字串要用equals判等 return 0; } int i = 0, j = 0; while(i < source.length()) { if (j < target.length() && source.charAt(i) == target.charAt(j)) { i++;//相等時,都往後加加。 j++; } else if (j == target.length()) { break;//加加到小串結尾時,跳出 } else {//匹配中途有一個不等時,拉回i到(與j相等的下一個)即j-1。 i = i - (j - 1); j = 0; } } if (j == target.length()) {//判斷上面出迴圈的條件, return i - target.length();//完全匹配子串 } else {//沒找到子串 return -1; } } public static int strStr(String haystack, String needle) { if (needle.length() == 0) return 0; for (int i = 0;; i++) { for (int j = 0;; j++) { if (j == needle.length()) return i; else if (i + j >= haystack.length()) return -1; else if (needle.charAt(j) != haystack.charAt(i + j)) break;// 不等時,跳出 執行外層迴圈i++ } } } public static void main(String[] args) { // String source = "lintcode"; // String target = "lintcode"; // String source = "mississippi"; // String target = "issip"; String source = ""; String target = "a"; // String source = "a"; // String target = ""; // String source = "abcdabcdefg"; // String target = "bcd"; System.out.println("輸出結果:" + strStr(source, target));//-1 System.out.println("輸出結果--strStrMy" + strStrMy(source, target));//-1 System.out.println("輸出結果空串.equals(null) :" + "".equals(null));//flase } }