统计字符串里面或数组中出现相同的字母个数

function changeArr(arr) {
  var obj = {};
  if (typeof arr === "string") {
    arr = arr.split("");
  } else if (typeof arr === "number") {
    arr = arr.toString().split("");
  }
  for (var i = 0; i < arr.length; i++) {
    var dt = arr[i];
    if (obj[dt]) {
      obj[dt]++;
    } else {
      obj[dt] = 1;
    }
  }
  return obj;
}

当传入的值为数组时,遍历数组,用对象的键值对的方式统计出现的次数

### 统计两个字符串相同字符的数量 为了实现这一目标,可以通过遍历其中一个字符串中的每个字符并检查它是否存在于另一个字符串中来完成。如果存在,则增加计数器的值,并标记该字符已被匹配以防止重复计算。 以下是一个基于 C 和 Java 的解决方案: #### 使用 C 实现 在 C 中,可以利用 `strchr` 函数查找某个字符是否存在另一字符串中[^1]。通过循环逐一比较两字符串中的字符即可得到共有字符数量。 ```c #include <stdio.h> #include <string.h> int count_common_characters(const char *s1, const char *s2) { int count = 0; char visited[256] = {0}; // 记录已访问过的字符 for (int i = 0; s1[i]; ++i) { if (!visited[s1[i]]) { visited[s1[i]] = 1; if (strchr(s2, s1[i]) != NULL) { count++; } } } return count; } int main() { const char* str1 = "hello"; const char* str2 = "world"; printf("Common characters: %d\n", count_common_characters(str1, str2)); return 0; } ``` 上述代码定义了一个函数用于统计共同字符数目,并使用辅助数组记录哪些字符已经被处理过以免重复计入结果。 #### 使用 Java 实现 Java 提供了更丰富的集合类支持操作如 HashSet 可用来存储唯一项从而简化逻辑[^2]。下面展示了一种方法来解决这个问题: ```java import java.util.HashSet; public class CommonCharacterCount { public static int commonCharacters(String a, String b){ HashSet<Character> setA = new HashSet<>(); HashSet<Character> intersectionSet = new HashSet<>(); // 将第一个字符串的所有字母加入到setA里 for(char c : a.toCharArray()){ setA.add(c); } // 遍历第二个字符串,查看其字母是否也在setA里面 for(char d : b.toCharArray()){ if(setA.contains(d)){ intersectionSet.add(d); // 如果有就加进intersectionSet } } return intersectionSet.size(); // 返回交集大小即为公共字符数 } public static void main(String[] args){ System.out.println(commonCharacters("abcde","ace")); // 输出应为3 } } ``` 此程序创建了两个哈希表分别保存来自不同输入串的独特元素;最后返回它们之间重叠部分长度作为最终答案。 ### 结论 无论是采用哪种编程语言,核心思路都是先去除重复再逐个对比找出共有的独特成员。这样不仅可以有效减少不必要的运算量还能提高算法效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值