第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

將String改為StringBuilder,程序就會出錯?

將String改為StringBuilder,程序就會出錯?

慕妹3146593 2019-01-17 20:41:46
目標(biāo):打印出給定字符串的所有的最長公共子序列。 示例:第一行:acb,第二行abc;輸出結(jié)果:ac,ab 正確程序: import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class LCS { private static int[][] dp; private static String s1, s2; private final static Set<String> set = new HashSet<>(); public static void main(String[] args) { Scanner in = new Scanner(System.in); s1 = in.nextLine(); int len1 = s1.length(); s2 = in.nextLine(); int len2 = s2.length(); //dp結(jié)果計(jì)算 dp = new int[len1+1][len2+1]; for (int i = 1; i < len1+1; i++) { for (int j = 1; j < len2+1; j++) { if (s1.charAt(i-1) == s2.charAt(j-1)) { dp[i][j] = dp[i-1][j-1] + 1; } else { dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]); } } } //打印dp結(jié)果 for (int i = 0; i < len1+1; i++) { for (int j = 0; j < len2+1; j++) { System.out.print(dp[i][j] + " "); } System.out.println(); } //輸出所有的LCS String res = ""; traceBack(len1, len2, res); System.out.println(set.toString()); } private static void traceBack(int len1, int len2, String res) { while (len1 > 0 && len2 > 0) { if (s1.charAt(len1-1) == s2.charAt(len2-1)) { res += s1.charAt(len1-1); //res.append(s1.charAt(len1-1)); len1--; len2--; } else { if (dp[len1][len2-1] > dp[len1-1][len2]) { len2--; } else if (dp[len1][len2-1] < dp[len1-1][len2]) { len1--; } else { traceBack(len1-1, len2, res); traceBack(len1, len2-1, res); return; } } } set.add(new StringBuilder(res).reverse().toString()); } } 錯誤代碼,求大佬指點(diǎn): 示例:第一行:acb,第二行abc;輸出結(jié)果:ac,abac,求解哪里出問題了?謝謝 import java.util.HashSet; import java.util.Scanner; import java.util.Set; /** * 問題:利用StringBuilder代替String就會有問題 */ public class LCS { private static int[][] dp; private static String s1, s2; private final static Set<String> set = new HashSet<>(); public static void main(String[] args) { Scanner in = new Scanner(System.in); s1 = in.nextLine(); int len1 = s1.length(); s2 = in.nextLine(); int len2 = s2.length(); //dp結(jié)果計(jì)算 dp = new int[len1+1][len2+1]; for (int i = 1; i < len1+1; i++) { for (int j = 1; j < len2+1; j++) { if (s1.charAt(i-1) == s2.charAt(j-1)) { dp[i][j] = dp[i-1][j-1] + 1; } else { dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]); } } } for (int i = 0; i < len1+1; i++) { for (int j = 0; j < len2+1; j++) { System.out.print(dp[i][j] + " "); } System.out.println(); } //輸出所有的LCS StringBuilder res = new StringBuilder(); traceBack(len1, len2, res); System.out.println(set.toString()); } private static void traceBack(int len1, int len2, StringBuilder res) { while (len1 > 0 && len2 > 0) { if (s1.charAt(len1-1) == s2.charAt(len2-1)) { res.append(s1.charAt(len1-1)); len1--; len2--; } else { if (dp[len1][len2-1] > dp[len1-1][len2]) { len2--; } else if (dp[len1][len2-1] < dp[len1-1][len2]) { len1--; } else { traceBack(len1-1, len2, res); traceBack(len1, len2-1, res); return; } } } set.add(new StringBuilder(res).reverse().toString()); } }
查看完整描述

1 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

traceBack(len1-1, len2, res);
traceBack(len1, len2-1, res);

執(zhí)行第一行后res會發(fā)生改變。

查看完整回答
反對 回復(fù) 2019-02-12
  • 1 回答
  • 0 關(guān)注
  • 461 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號