【CodeWars】Counting Duplicates

15 篇文章 0 订阅

题意

题目链接:https://www.codewars.com/kata/counting-duplicates/train/java/5cf118cee10216001acc1c83

Count the number of Duplicates
Write a function that will return the count of distinct case-insensitive alphabetic characters and numeric digits that occur more than once in the input string. The input string can be assumed to contain only alphabets (both uppercase and lowercase) and numeric digits.

Example
"abcde" -> 0 # no characters repeats more than once
"aabbcde" -> 2 # 'a' and 'b'
"aabBcde" -> 2 # 'a' occurs twice and 'b' twice (`b` and `B`)
"indivisibility" -> 1 # 'i' occurs six times
"Indivisibilities" -> 2 # 'i' occurs seven times and 's' occurs twice
"aA11" -> 2 # 'a' and '1'
"ABBA" -> 2 # 'A' and 'B' each occur twice

题目意思很简单,就是求出给定字符串中出现次数最多的字符出现的次数,如果是字母则大小写,思路也比较简单,有人使用Map来记录字符出现的次数去实现,我的做法是定义一个大小为ASCII最大值(127)的数组,以每个字符的ASCII码作为数组的下标,遍历时对数组中的元素进行累加,这个思路虽然有一些空间浪费,但是数组长度127对于计算机来说非常非常小,优点在于代码可以非常简洁,如果用Map来实现还需要检查key是否已经存在、遍历Map需要同时去获取key和value等一些操作,虽然也不复杂,还是更喜欢简洁一些的写法(性能相差不大的情况下)

代码

public class CountingDuplicates {
    public static int duplicateCount(String text) {
        if (text == null ||text.length() == 0) return 0;
         
        int result = 0;
        int[] count = new int[127];
        text = text.toUpperCase();
        String[] arr = text.split("");

        for (String s : arr) {
            int index = s.charAt(0);
            count[index]++;
        }

        for (int i : count) {
            if (i > 1) result++;
        }

        return result;
    }
}

测试用例

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;

public class SolutionTest {
    @Test
    public void abcdeReturnsZero() {
        assertEquals(0, CountingDuplicates.duplicateCount("abcde"));
    }
    
    @Test
    public void abcdeaReturnsOne() {
        assertEquals(1, CountingDuplicates.duplicateCount("abcdea"));
    }
    
    @Test
    public void indivisibilityReturnsOne() {
        assertEquals(1, CountingDuplicates.duplicateCount("indivisibility"));
    }
    
    @Test 
    public void reallyLongStringContainingDuplicatesReturnsThree() {
        String testThousandA = new String(new char[1000]).replace('\0', 'a');
        String testHundredB = new String(new char[100]).replace('\0', 'b');
        String testTenC = new String(new char[10]).replace('\0', 'c');
        String test1CapitalA = new String(new char[1]).replace('\0', 'A'); 
        String test1d = new String(new char[1]).replace('\0', 'd'); 
        String test = test1d + test1CapitalA + testTenC + 
            testHundredB + testThousandA;
        

        assertEquals(3, CountingDuplicates.duplicateCount(test));
    }
    
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: yolov5 counting是一种基于yolov5模型实现的目标计数技术。作为计算机视觉领域的一项重要任务,目标计数在许多应用具有广泛的用途。yolov5是一种深度学习模型,其通过训练大量的图像数据和目标标注信息,能够自动识别和定位图像的不同目标,并进行准确的计数。 yolov5 counting的实现过程可以大致分为以下几个步骤。首先需要收集并标注大量的图像数据集,以供训练模型使用。这些标注信息通常包括目标的位置、类别、数量等。然后,使用yolov5这个强大的深度学习模型,通过对训练数据的反复学习和优化,使其能够准确地识别和计数不同的目标。 在目标计数任务,yolov5 counting的工作原理是基于目标检测的。它首先在输入的图像检测出所有的目标,然后对它们进行分类,并记录下每个类别的数量。通过这种方式,我们可以实现对不同目标的计数。与传统的目标计数方法相比,yolov5 counting具有高准确性和高效性的特点,能够在较短的时间内实现大规模图像数据的目标计数。 除了在实际应用进行目标计数之外,yolov5 counting还可以用于其他领域的研究和开发。例如,它可以用于交通流量监测、人群数量统计、工地安全监控等方面。通过对图像数据进行目标计数,我们可以获得更加详细和准确的信息,从而更好地了解和处理不同场景下的问题。 总之,yolov5 counting是一种基于yolov5模型的目标计数技术,它可以通过目标检测和分类的方式,准确地识别和计数图像的目标。在计算机视觉和人工智能领域,yolov5 counting具有重要的研究和应用价值,将为我们带来更多的便利和效益。 ### 回答2: yolov5 counting 是一种基于深度学习的目标检测算法,主要用于检测并计数图片或视频的不同种类的物体。 yolov5 counting 基于yolov5模型,采用了一种名为YOLO(You Only Look Once)的目标检测方法。与传统的目标检测算法相比,YOLO具有更快的检测速度和更高的精度。而yolov5 counting 是在yolov5的基础上进行了改进和优化,使其更加适合于物体计数任务。 yolov5 counting 使用深度卷积神经网络对输入的图片或视频进行分析,并将其的物体进行检测和识别。它能够在一张图片同时检测出多个物体,并根据物体的类别进行分类和计数。无论是人、车、动物还是其他物体,yolov5 counting 都能够准确地检测出来并进行计数。 yolov5 counting 的训练需要大量的标注数据和计算资源,它通过对训练集的图片进行标注,并使用反向传播算法进行模型训练。训练完成后的模型可以用于对新的图片或视频进行目标检测和计数。 yolov5 counting 在许多领域都有广泛的应用,比如交通控制、人群管理、安防监控等。通过利用yolov5 counting ,我们可以实时地进行物体计数,从而帮助我们更好地理解和管理我们周围的环境。 ### 回答3: YOLOv5 counting是一种基于YOLOv5算法的目标计数方法。YOLOv5是一种高效的目标检测算法,它可以在图像或视频实时地检测多个目标,并给出它们的坐标和类别。 在YOLOv5 counting,我们首先将待计数的目标和背景提取出来。然后,利用YOLOv5模型对这些目标进行检测。检测到的目标会被标记上类别和位置信息。接下来,我们根据需要统计目标的数量。可以简单地根据检测到的目标数进行统计,也可以根据目标的类别进行区分。 YOLOv5 counting在很多领域都有应用。例如,在人群管理,可以利用YOLOv5 counting对人群数量进行实时监测和统计,以确保人群密度控制在安全范围内。在交通领域,可以利用YOLOv5 counting对车辆进行计数,从而监测道路拥堵情况或者进行车流量统计。 总之,YOLOv5 counting是一种基于YOLOv5算法的目标计数方法。它可以快速、准确地对目标进行检测,并实时地统计目标的数量。这种方法在很多实际应用非常有用,为我们提供了便利和帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WGeeker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值