Leecode統計子串個數(java)
阿新 • • 發佈:2020-08-23
/**
- 獲取一個字串在另一個字串中出現的次數。判斷str2在str1中出現的次數
*/
public class StringExer2 { public static void main(String[] args) { String str1 = "ab"; String str2 = "abaaba"; getCount(str1, str2); System.out.println("子串出現的次數為:" + count); } /* * 如果發現str2中有字元與str1中字元相等,則進入內層迴圈 * 用str2中每一個字元去和str1的字元比較 * 如果不相等,結束內層迴圈 * 如果相等,判斷當前子串索引是否與子串長度-1相等 * 如相等,則子串已遍歷完,count+=1 * 如不等,則繼續下一次內層迴圈 * * */ static int getCount(String str1, String str2) { str1 = "ab"; str2 = "aabjkdaaaaafjksdabkjdfsdabj"; //將字串轉換成字元陣列 char[] ch1 = str1.toCharArray(); char[] ch2 = str2.toCharArray(); int len1 = str1.length(); int len2 = str2.length(); int count = 0;//記錄出現次數 boolean loopFlag = true;//設定一個標識,用於判斷是否找到匹配字元的開關 for (int i = 0; i < len2; i++) { //用比較陣列的首元素進行匹配,一旦匹配到相同的字元,開始後繼的檢測 if (ch1[0] == ch2[i]) { for (int j = 0, k = i; j < len1; j++, k++) { if (k != len2 && ch1[j] == ch2[k]) { // k != len2 是為了應對ab在aba中出現的這種狀況 //比較完最後一個字元元素且相同,計數器+1 if (j == len1 - 1) { count++; i += len1 - 1;//用於跳過已在匹配的子字串範圍內的長度,-1是為了抵消迴圈的遞增 loopFlag = false; } } else break;//一旦發現對應位數不相等,退出檢測 } } } if (loopFlag) { System.out.println("沒有匹配的字串!"); } return count; } }