组合字符串 - 相同字符的运行在一起

问题描述:

我创建了一个将两个给定字符串组合在一起的代码,并通过交替两个字符串中的字符来获取字符串。 例如:“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); 
} 

您可能仍然会碰到一个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个字符串的迭代器。所以这不能通过一个迭代变量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; 
} 

希望这有助于。