###### tags: `apcs` `解題筆記` `歷屆練習` `自主學習` 字串綜合練習 === {%hackmd BJrTq20hE %} [TOC] ## StringBuilder使用時機 當有很多答案要輸出時,用StringBuilder存起來一次輸出會比每次都輸出快很多。 ## String/StringBuilder語法 ```java= //建立 String s = new String(); String[] d = new String[20]; StringBuilder ans = new StringBuilder(); //存放 s = "1 2 3"; d = s.split(" ");//d[0] = 1,d[1] = 2,d[2] = 3 ans.append("12345"); //取值 String t = s.charAt(0);//t = "1" t = d[1];//t = "2" t = ans;//t = "12345" ``` ## [歷屆:交錯字串](https://zerojudge.tw/ShowProblem?problemid=c462) ###### tags: `字串` `找規律` ### 題目簡述 輸入整數k與字串s,尋找s裡面最長的k交錯字串長度。 k交錯字串:大小寫以長度為k的規律呈現,如1:aAbBcC(一個字母也算);2:aaBBcc;3:aaaBBBccc。 ### 解法  ```java= import static java.lang.System.*; import java.util.Scanner; public class zj_c462 { public static void main(String[] args) { //輸入 Scanner br = new Scanner(in); int k = br.nextInt(); String ss = br.nextLine(); ss = br.nextLine(); //轉成true false boolean[] s = new boolean[ss.length()]; for(int i = 0;i < ss.length();i++) { s[i] = (ss.charAt(i)>= 'A' && ss.charAt(i)<= 'Z'); } //t=數量 //temp=現在這條交錯字串的長度 int t = 1,ans = k==1?1:0,temp = 0; //k=1時例外處理,每一條轉換字串就加 if(k == 1) { for(int i = 1;i < s.length;i++) { //如果跟前一個不同代表換了,加 if(s[i-1] != s[i]) temp++; //一樣就斷裂 重算 else temp = 1; //刷新最大值 if(temp>ans) ans = temp; } } else { for(int i = 1;i < s.length ;i++) { //跟前面一樣 算數量 if(s[i-1] == s[i]) { t++; //有k長度的時候加然後刷新最大值 if(t == k) { temp += k; if(temp>ans) { ans = temp; } } //超過就斷裂 重算 if(t>k) { temp = k; } } //不同的話看前面長度有沒有到k,不是就斷裂,重算 是的話t從一開始算 else { if(t<k) { temp = 0; } t = 1; } } } out.println(ans); } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up