1. 程式人生 > 實用技巧 >招銀三面手撕程式碼題(字串連續子串)

招銀三面手撕程式碼題(字串連續子串)

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;
        }
    }