1. 程式人生 > >java中空串 “”!=null..字串要用equals判等

java中空串 “”!=null..字串要用equals判等

自己寫測試用例,區別:字串為    空串“ ”,空物件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
	}
}