招銀三面手撕程式碼題(字串連續子串)
阿新 • • 發佈:2020-07-16
import java.util.*; /*編寫函式,找出字串中連續出現的字元 * 返回連續字元子串的陣列 * 若無連續字元子串,返回空陣列*/ public class continuationsubstring { public static void main(String[] args) { LinkedList<String> list = new LinkedList(); List<String> res = getRes("dad", list); System.out.println(res); } public static List<String> getRes(String str, List list) { int count = 1;//count用來對重複元素個數計數,每次元素值改變之後都是1 char ch = str.charAt(0); for (int i = 0; i < str.length(); i++) { //判斷如果當前索引處的值和ch相同就count++ while (++i < str.length() && str.charAt(i) == ch) { count++; } //預設每個元素都會出現一次,如果大於1代表出現了兩次,放到list中 if (count > 1) { StringBuilder builder = new StringBuilder(); for (int j = 0; j < count; j++) { builder.append(ch); } list.add(builder.toString()); } //此時已經退出while迴圈,代表這個元素已經和之前的不同了 // 每次在本次迴圈之後維護ch和i和count的值 if (i < str.length()) { ch = str.charAt(i); count = 1;//預設count都應該是1,因為每個新元素 都出現了1次 i--;//上邊while迴圈的時候是++i,此時再減回來 } } return list; } }