2014-02-21 16 views
0

我很困惑,當字符串有超過2個常見字母: 「abc」+「bcd」 =「abcd」,沒有像「abccd」或「abbccd」的重複假設有兩個字符串與一個或多個常見字母,把它們放在一起,例如「ab」+「bc」=「abc」

public static String make_new_name(String name1, String name2) { 
    String result = ""; 
    for (int i = 0 ; i < name1.length() ; i++) { 
     System.out.println("=========== i " + name1.charAt(i) + " ================="); 
     for (int j = 0 ; j < name2.length() ; j++) { 
      System.out.println(" j : " + name2.charAt(j)); 
      if (name1.charAt(i) != name2.charAt(j)) { 
       result += name1.charAt(i); 
      } else { 
       result += name1.charAt(j); 
      } 
     } 
    } 
    System.out.println(result) ; 
    return result ; 
} 

但這段代碼不起作用!請幫忙。

+1

因此,您正在尋找第一個字符串的後綴與第二個字符串的前綴相同。它是否正確? –

+0

他們有相同的長度嗎?它們是否總是直接的(即「ab」和「bc」而不是「ab」和「cb」)? – Shahar

回答

3

假設這是一個學習練習,我不會通過編寫代碼來破壞你的樂趣。

這是一個簡單的算法,只需要一個顯式循環:遍歷第一個字符串的所有後綴,並檢查它們是否代表第二個字符串的前綴。從最長的後綴開始(這是整個第一個後綴)並且繼續使用較短和較短的後綴。一旦找到與第二個單詞的前綴匹配的後綴,請刪除該後綴,並將第二個字符串附加到結果中。

在Java中,通過調用具有一個參數的子串來獲得單詞的後綴。要檢查一個字符串是否是另一個字符串的前綴,請使用startsWith方法。

0

你可以設置差異的兩個字符串,然後concat他們得到結果。

public static String make_new_name(String name1, String name2) { 
    Set<Character> nameSet1 = new HashSet<Character>(); 
    for(char c : name1.toCharArray()) 
    { 
     nameSet1.add(c); 
    } 

    Set<Character> nameSet2 = new HashSet<Character>(); 
    for(char c : name2.toCharArray()) 
    { 
     nameSet2.add(c); 
    } 

    nameSet1.removeAll(nameSet2); // Set Difference 

    StringBuilder sb = new StringBuilder(nameSet1.size() + nameSet2.size()); 

    for(Character c : nameSet1) 
    { 
     sb.append(c); 
    } 
    for(Character c : nameSet2) 
    { 
     sb.append(c); 
    } 

    return sb.toString(); 

} 
相關問題