2012-03-21 151 views
0

在過去一小時裏,我一直在絞盡腦汁想知道如何做到這一點。這更像是一個邏輯問題,而不是我想的技術問題。計算兩個字符串有多少個重複字符

我有兩個字符串,並希望統計他們有多少共同的字符。即艾米莉+安迪= 1.

我以爲我可以將字符串轉換爲字符數組,並使用兩個For語句在對方通過每個可能性,但我不是100%我會怎麼做。我搜索了谷歌的答案,但我沒有得到任何地方。

我很抱歉沒有提供任何代碼,我目前沒有任何代碼。我對Java相當陌生,我不確定如何去解決這個問題。

任何人都有解決方案?

+2

對於輸入Emilyy和Andyy,你期待2或1作爲結果? Emilyy和Andy怎麼樣? – 2012-03-21 04:07:51

+0

這看起來像一個家庭作業。您所描述的方法將給出結果,但可能會有更多最佳解決方案。 – Jayan 2012-03-21 04:08:40

+0

艾米特,這不重要,我寧願它返回1。 Jayan - 不是作業,我想要更熟悉Android/Java,我正在寫一個花哨的'個性配對應用程序',這將成爲'公式'的一部分 – CitizenSmif 2012-03-21 04:12:44

回答

3

首先,您必須刪除兩個字符串中的重複字母,然後您必須進行比較。下面的代碼工作正常。

public class CountDuplicates { 

    /** 
    * Author Krishnan 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String str1 = "palani"; 
     String str2 = "krishnan"; 
     String str11 = ""; 
     String str12 = ""; 
     char[] ch1 = str1.toCharArray(); 
     char[] ch2 = str2.toCharArray(); 
     int count = 0; 
     for(int i=0; i<ch1.length; i++) 
     { 
      if(!str11.contains(ch1[i]+"")) 
      { 
       str11 += ch1[i]; 
      } 
     } 
     for(int i=0; i<ch2.length; i++) 
     { 
      if(!str12.contains(ch2[i]+"")) 
      { 
       str12 += ch2[i]; 
      } 
     } 
     char[] ch11 = str11.toCharArray(); 
     char[] ch12 = str12.toCharArray(); 
     for(int i=0; i<ch11.length; i++) 
     { 
      for(int j=0; j<ch12.length; j++) 
      { 
       if(ch11[i] == ch12[j]) 
       { 
        count++; 
       } 
      } 
     } 
     System.out.println("Duplicate Letters: " + count); 
    } 

} 

輸出:

重複快報:3

+0

謝謝,工作完美。 – CitizenSmif 2012-03-21 04:44:40

1

您可以將每個字符串轉換爲一個集合,然後執行一組交集,以找出字符可能共有的方式。這可能更容易理解。

0

你可以遍歷第一個字符串把每個字符鍵一個Hashtable中以0

迭代的在第二個字符串值,如果字符是在哈希表,取代它與1

迭代散列表並添加您的值。

0

下面的方法將在兩個不同的字符串中打印通用字符。

public void compareString(String s1, String s2) { 
     List<Character> charList = new ArrayList<Character>(); 
    int count = 0; 
    for(char c : S1.toCharArray()) { 
     if(!charList.contains(c)) { 
      INNER: for(char c1 : S2.toCharArray()) { 
       if(c == c1) { 
        count = count+1; 
        charList.add(c); 
        System.out.println(c1); 
        break INNER; 
       } 
      } 
     } 
    } 
    System.out.println("Duplicated Characters in two different strings :"+count); 
    } 
+0

如果兩個字符串都包含一個重複的字符,說'a'兩次,它會給出4的計數,並打印'一個'4次,這是我不正確的。 – gbulmer 2012-03-21 04:38:12

+0

糟糕,你的正確gbulmer。感謝您指出這一點 – CitizenSmif 2012-03-21 04:39:02

+0

感謝您通知我的錯誤。我根據您的建議修改了代碼。再次感謝gbulmer – kandarp 2012-03-21 04:51:25

1

這肯定聽起來像一個家庭作業......但如果不是這樣,我會通過轉換字符串的字符數組,寫一個嵌套循環,每個字符進行比較和遞增計數器解決這個問題時,匹配被發現。如果你只計算每個字母一次,那麼算法會改變一點。

+0

感謝您的評論。說實話不是功課,我現在還沒有上過教育。 – CitizenSmif 2012-03-21 04:44:06

0

這看起來像功課。

的傳統方法,它適用於大多數語言是:

  1. 轉換字符串字符數組的數組
  2. 排序,爲必要時刪除重複遞增的順序
  3. ,或者使用一個假值,和求助於,或洗牌起來,這是while循環中,使用i和j的一個原因進行排序在一個沿所述陣列
  4. 迭代:
    當[I]> b [j]時,增量Ĵ,
    當[I] < B [J],增量I,
    否則,你有一個匹配,輸出,它保存在一個數組,或者只是指望它,並增加我&Ĵ
  5. 退出循環當一個陣列被耗盡,I>的最後一個元素,或b> b

完成的最後一個元素

1
String s1 = "abbccsartcc"; 
    String s2 = "cbdcezxrtcc"; 
    Set arrSet1 = new HashSet(convertToList(s1)); 
    Set arrSet2 = new HashSet(convertToList(s2)); 
    arrSet1.retainAll(arrSet2) 
    System.out.println("Similar characters-->" + arrSet1.size()); 

convertToList方法:

private static List convertToList(String str) { 
    List tempList = new ArrayList(); 
    char[] arr = str.toCharArray(); 
    for (char a : arr) { 
     tempList.add(String.valueOf(a)); 
    } 
    return tempList; 
} 

這將完美地工作! HTH !!

0

您可以使用ArrayList來解決這個問題如下,我只是把這個在一起,真正的快,但它應該是一個良好的開端:

import java.util.ArrayList; 

    public class StringCount { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    // Get the strings from the command line or pass into method. 
    String name1 = "Emyyilyyyyy"; 
    String name2 = "Andyyyy"; 
    int count = 0; 

    ArrayList<String> cache = new ArrayList<String>(); 


    for (int i = 0;i < name1.length();i++) 
    { 
     String check = name1.substring(i, i+1); 
     System.out.println("Letter to check: " + check); 
     if (name2.indexOf(check) != -1) 
     { 
      // Check to see if we already found the character so we don't count it again 
      if (!cache.contains(check)) 
      { 
       System.out.println("Found: " + check + " in: " + name2); 
       cache.add(check); 
       count++; 
      } 
     } 

    } 
    System.out.println(); 
    System.out.println("Count = " + count); 



    } 

    } 
相關問題