private static int findAnargamStr(String searchingStr, String patternStr) {
		if (null == searchingStr || searchingStr.isEmpty()) {
			throw new IllegalArgumentException("the arg:searchingStr can not be null or empty");
		}

		if (null == patternStr || patternStr.isEmpty()) {
			throw new IllegalArgumentException("the arg:patternStr can not be null or empty");
		}

		if (searchingStr.length() < patternStr.length()) {
			return 0;
		}

		int count = 0;

		//generate hashmap and hashvalue
		generatePatternHash(patternStr);
		long tmpHashValue = 0;

		int l = patternStr.length();
		int n = searchingStr.length();

		for (int i = 0; i < n; i++) {
			char c = searchingStr.charAt(i);

			//calculate the first sub-string (0:pattern.length()-1) which length equal to pattern
			if (i < l) {
				tmpHashValue += ((int) c) * FACTOR;
			} else {
				//new tmpHashValue: (a[in-index]-a[out-index]) * FACTOR
				tmpHashValue += ((int) c - (int) searchingStr.charAt(i - l)) * FACTOR;

				//if the hash-value matched, compare each character
				//注：如果这里采用一个好的hash函数 或者 增大hash 槽 或者给字符串进行hash签名来避免过多的hash碰撞，
				// 那么这里就可以大大简化对isAnagram的调用，从而使得整个问题的复杂度逼近O(n)
				if (hashValueOfPattern == tmpHashValue)
					if (isAnagram(searchingStr, i - l + 1, i, patternStr))
						count++;
			}

		}

		return count;
	}