2016-03-08 68 views
0

我創建了一個將兩個給定字符串組合在一起的代碼,並通過交替兩個字符串中的字符來獲取字符串。 例如:「xyz」和「abc」會得到「xaybzc」組合字符串 - 相同字符的運行在一起

我遇到的問題是,對於同一個字符的任何運行,這些字符應該保持在一起。 例如:「ABC」和「xyyz」會得到「axbyycz」

這是我寫:

public static java.lang.String interleaveWithRuns(java.lang.String s, java.lang.String t) 
{ 
    String str = ""; 
    int i = 0; 
    while(i < s.length() && i < t.length()) 
    { 
     if(s.charAt(i) == s.charAt(i + 1)) 
     { 
      str += s.charAt(i) + s.charAt(i+1); 
     } 
     if(t.charAt(i) == t.charAt(i+1)) 
     { 
      str += t.charAt(i) + t.charAt(i+1); 
     } 
     str += s.charAt(i) +""+ t.charAt(i); 
     i++; 
    } 
    while(i < s.length()) 
    { 
     str += s.charAt(i); 
     i++; 
    } 
    while(i < t.length()) 
    { 
     str += t.charAt(i); 
     i++; 
    } 
    return str; 
} 

我知道,這部分是哪裏出了問題來了,但我不知道我應該做些什麼來解決這個問題。

if(s.charAt(i) == s.charAt(i + 1)) 
{ 
    str += s.charAt(i) + s.charAt(i+1); 
} 
if(t.charAt(i) == t.charAt(i+1)) 
{ 
    str += t.charAt(i) + t.charAt(i+1); 
} 

回答

0

您可能仍然會碰到一個ArrayIndexOutOfBoundsException如果,(s.charAt(i) == s.charAt(i + 1))檢查時,實際上沒有s.charAt(i + 1),你已經打了字符串的結尾。使用遞歸可以避免這種乾淨:

public static String concat(String a, String b) 
{ 
    if(a.length() == 0){ 
     return b; 
    } 

    if(b.length() == 0){ 
     return a; 
    } 

    String a1 = "" + a.charAt(0); 
    int i = 1; 
    while(i < a.length() && a.charAt(i) == a.charAt(0)) 
    { 
     a1 += a.charAt(i++); 
    } 

    String b1 = "" + b.charAt(0); 
    i = 1; 
    while(i < b.length() && b.charAt(i) == b.charAt(0)) 
    { 
     b1 += b.charAt(i++); 
    } 

    return a1 + b1 + concat(a.substring(a1.length()), b.substring(b1.length())); 
} 
+0

謝謝!它完美的作品 – Zebs

2

對於這個特定的問題,你應該跟蹤2個字符串的迭代器。所以這不能通過一個迭代變量i來完成。對於字符串sj,字符串t需要i

此外,爲避免遇到數組超出限制的錯誤,特別是當相同的字符位於任何字符串的末尾時,兩個字符串的條件都會添加短路條件。像這樣:(i < s.length() - 1) && further condition

以下是對interleaveWithRuns函數的更改。

public static java.lang.String interleaveWithRuns(java.lang.String s, 
     java.lang.String t) { 
    String str = ""; 
    int i = 0; 
    int j = 0; 
    while (i < s.length() && j < t.length()) { 
     if ((i < s.length() - 1) && (s.charAt(i) == s.charAt(i + 1))) { 
      str += String.valueOf(s.charAt(i)) 
        + String.valueOf(s.charAt(i + 1)); 
      str += String.valueOf(t.charAt(j)); 
      i++; 
     } else if ((j < t.length() - 1) && (t.charAt(j) == t.charAt(j + 1))) { 
      str += String.valueOf(s.charAt(i)); 
      str += String.valueOf(t.charAt(j)) 
        + String.valueOf(t.charAt(j + 1)); 
      j++; 
     } else { 
      str += s.charAt(i) + "" + t.charAt(j); 
     } 
     i++; 
     j++; 
    } 
    while (i < s.length()) { 
     str += s.charAt(i); 
     i++; 
    } 
    while (j < t.length()) { 
     str += t.charAt(j); 
     j++; 
    } 
    return str; 
} 

希望這有助於。

相關問題