计算两个字符串有多少重复字符

时间:2012-03-21 04:04:17

标签: java string char similarity

过去一小时我一直在绞尽脑汁想知道如何做到这一点。这更像是一个逻辑问题,而不是我认为的技术问题。

我有两个字符串,希望计算它们共有多少个字符。 I.e Emily + Andy = 1。

我以为我可以将字符串转换为字符串数组,并在彼此之间使用两个For语句来完成每种可能性,但我不是100%就如何做到这一点。我已经搜索谷歌的答案,但我没有得到任何答案。

我为没有提供任何代码而道歉,我目前没有任何代码。我对Java很新,我不知道如何解决这个问题。

任何人都有解决方案吗?

8 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以将每个字符串转换为一个集合,然后执行集合交集以找出字符的共同点。这可能更容易理解。

答案 2 :(得分:1)

这绝对听起来像是一个家庭作业...但如果不是,我会通过将字符串转换为字符数组并编写嵌套的for循环来解决这个问题,该循环比较每个字符并在找到匹配时递增计数器。如果你只计算每个字母一次,那么算法会稍微改变一下。

答案 3 :(得分: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 !!

答案 4 :(得分:0)

你可以迭代第一个字符串,将每个字符作为键放入一个值为0的Hashtable。

迭代第二个字符串,如果字符在哈希表中,则将其值替换为1.

迭代哈希表并添加你的值。

答案 5 :(得分: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);
  }

答案 6 :(得分:0)

这看起来像是家庭作业。

适用于大多数语言的传统方法是:

  1. 将字符串转换为字符数组
  2. 按顺序对数组进行排序
  3. 如有必要,可以使用虚拟值删除重复项,然后使用虚拟值,或者将其重新打包,这是排序的一个原因
  4. 在一个while循环中沿着数组迭代,使用i和j:
    当a [i]&gt; b [j],增量j,
    当a [i]&lt; b [j],增加i,
    否则你有一个匹配,输出它,保存在一个数组中,或只是计算它,并增加i&amp; Ĵ
  5. 当一个阵列耗尽时离开循环,i> a的最后一个元素,或b> b的最后一个元素
  6. 完成

答案 7 :(得分: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);



    }

    }