如何识别两个字符串之间的共同字符数?

时间:2015-11-18 02:06:01

标签: java for-loop

  

给定2个字符串str1和str2作为输入,返回str1和str2中相同位置的字符计数。

示例输入#1

伯爵("纽约","新德里")

样本输出#1

4

因为两个字符串共享相同的四个主要字符:"新"

示例输入#2

计数("犀""河马&#34)

样本输出#2

2

因为' o'占据第四位,并且排在第四位。两个字符串中的第十一个位置。

MyApproach

@Edit

$ xcode-select --install

参数实际输出预期输出

'三等分''类' 0 1

  

我现在得到正确的输出。

Thanku

9 个答案:

答案 0 :(得分:1)

使用单个循环可以更好地完成。使用解决方案找到以下代码: -

class GetCount {

public static void main(String args[]) {
    String myString = "rhinoceroses";
    String myString1 = "hippopotamus";

    count(myString, myString1);
}

/**
 * @param myString
 * @param myString1
 */
private static void count(String myString, String myString1) {
    int i = 0;
    int count = 0;
    int length = myString.length() < myString1.length() ? myString.length() : myString1.length();
    while(i < length) {
        if(myString.charAt(i) == myString1.charAt(i)) {
            count++;
        }
        i++;
    }
    System.out.println("Count is :: " + count);

}

}

答案 1 :(得分:1)

这是一个非常容易理解的紧凑型解决方案。

解决方案

public static int count(String s1, String s2){
    int count = 0;
    for (int i = 0 ; i < (s1.length() > s2.length() ? s2 : s1).length() ; i++){
        count += s1.charAt(i) == s2.charAt(i) ? 1 : 0;
    }
    return count;
}

输入

public static void main(String[] args) {
    System.out.println(
            "New York, New Delhi : " 
            + count("New York", "New Delhi"));

    System.out.println(
            "Rhinoceroses, Hippopotamus : " 
            + count ("Rhinoceroses", "Hippopotamus"));
}

输出

New York, New Delhi : 4
Rhinoceroses, Hippopotamus : 2

答案 2 :(得分:0)

您也可以这样做。 (试试) -

public int count(String s1, String s2) {
    int result=0;
    char[] ch1=s1.toCharArray();
    char[] ch2=s2.toCharArray();

    if(ch1.length>ch2.length){
    for(int i=0;i<ch2.length;i++){
        if(ch1[i]==ch2[i]){
            result++;
        }
    }
    }
    else{
        for(int i=0;i<ch1.length;i++){
            if(ch2[i]==ch1[i]){
                result++;
            }
        }
    }
    return result;
}

答案 3 :(得分:0)

以前提供的解决方案是没有用的,因为它们仅在字符按相同顺序排列时才起作用。 这是我的解决方案:

private int commonCharacterCount(String s1, String s2) {
    int counter = 0;

    List<Character> list = new LinkedList<>();
    for (char aChar : s1.toCharArray()) {
        list.add(aChar);
    }

    for (char c : s2.toCharArray()) {
        if (list.contains(c)) {
            list.remove(Character.valueOf(c));
            counter++;
        }
    }
    return counter;
}

不客气:)

答案 4 :(得分:0)

打字稿解决方案。保证约束: 1≤s1.length≤15,1≤s2.length≤15

Float

答案 5 :(得分:0)

由于您需要计算相同位置的字符数,因此我们可以在每次循环(字符串位置)的单循环中检查一下字符数是否相等。并且迭代次数应为str1str2的最小长度(也许我们可以在变量中提取Math.min(str1.length(), str2.length()))。我使用循环条件下的最小字符串长度将您的解决方案中的if - else分支压缩为单个循环。

public int countCommonChars(String str1, String str2) {
  int commonCharsNumber = 0;
  for(int i=0; i< Math.min(str1.length(), str2.length()); i++) {
    if (str1.charAt(i) == str2.charAt(i)) {
      commonCharsNumber++;
    }
  }
  return commonCharsNumber;
}

答案 6 :(得分:0)

int commonCharacterCount(String s1, String s2) {

    Map<String, Integer> mapOfString1 = getOcuurances(s1);
    Map<String, Integer> mapOfString2 = getOcuurances(s2);

    int counter = 0;

    for (Map.Entry<String, Integer> entry : mapOfString2.entrySet()) {
        if (mapOfString1.get(entry.getKey()) != null) {
            if (mapOfString1.get(entry.getKey()) > entry.getValue()) {
                counter += entry.getValue();
            } else {
                counter += mapOfString1.get(entry.getKey());
            }
        }

    }
    return counter;
}

public Map<String, Integer> getOcuurances(String s) {
    Map<String, Integer> hashMap = new HashMap<>();
    String[] strings = s.split("");
    for (int i = 0; i < strings.length; i++) {
        if (hashMap.containsKey(strings[i])) {
            hashMap.put(strings[i], hashMap.get(strings[i]) + 1);
        } else {
            hashMap.put(strings[i], 1);
        }
    }
    return hashMap;
}

答案 7 :(得分:-1)

虽然已经有一个已经接受的答案,但我觉得答案不够简洁,因此我给了我(没有编译,请把它视为伪代码)

public static int count(String s1, String s2) {
    if (s1 == null || s2==null ||s1.isEmpty() || s2.isEmpty()) {
        return 0;
    }
    int minLength = Math.min(s1.length(), s2.length());
    int count = 0;
    for (int i < 0; i < minLength; ++i) {
        if (s1.charAt(i) == s2.charAt(i)) {
            ++count;
        }
    }
    return count;
}

答案 8 :(得分:-2)

public int count(String str1, String str2) {
    int result = 0;
    if (str1.length() == 0 || str2.length() == 0)
        return result;
    if (str1.length() > str2.length()) {
        for (int i = 0; i < str2.length(); i++) {
            if (str2.charAt(i) == str1.charAt(i))
                result++;
        }
    }
    else {
        for (int i = 0; i < str1.length(); i++) {
            if (str1.charAt(i) == str2.charAt(i))
                result++;
        }
    }
    return result;
}