查看原文
其他

一道简单的算法面试题

初学者 进击吧大数据 2022-07-01

统计指定字符在字符串中出现的次数,包含连续重复的情况,例如要统计字符'a'在'aaa'中出现的次数,那么统计出的结果是3,如果要统计'aa'在'aaa'中出现的次数,那么统计出的结果是2。具体实现思路:

  •  1.首先要确定的是要统计出该结果,肯定是需要对字符串进行遍历的,那么无非就是哪种遍历方式更加高效,时间复杂度更低

  • 2.第一种方案:最直接的方式就是依次顺序遍历

  • 3.第二种方案:好一点的方案就是根据指定字符的长度进行间隔遍历,间隔长度就是指定字符的长度



这里给出两种方案的代码

public class CharCount { /** * 依次顺序遍历 * * @param srcStr * @param searchStr */ private static void strCountWithIterator(String srcStr, String searchStr) { if (srcStr.length() > 0 && searchStr.length() > 0) { int searchStrLength = searchStr.length(); int srcStrLength = srcStr.length(); int count = 0; if (srcStrLength >= searchStrLength) { int stopIndex = srcStrLength - searchStrLength; long startTime = System.currentTimeMillis(); //第一种方式,顺序遍历 for (int i = 0; i <= srcStrLength; i++) { if (i > stopIndex) { System.out.println("第一种统计方式出现次数为:" + count); break; }
if (searchStr.equalsIgnoreCase(srcStr.substring(i, i + searchStrLength))) { count++; } } long l1 = System.currentTimeMillis() - startTime; System.out.println("第一种方式耗时:" + l1); } } }
/** * 间隔遍历 * * @param srcStr * @param searchStr */ private static void strCountWithIteratorTwo(String srcStr, String searchStr) { if (srcStr.length() > 0 && searchStr.length() > 0) { int searchStrLength = searchStr.length(); int srcStrLength = srcStr.length(); if (srcStrLength >= searchStrLength) { int j = 0; int count1 = 0; long startTime1 = System.currentTimeMillis(); while ((j + searchStrLength) <= srcStrLength) { if (searchStr.equalsIgnoreCase(srcStr.substring(j, j + searchStrLength))) { count1++; } j = j + searchStrLength - 1; } System.out.println("第二种统计方式出现的次数:" + count1); System.out.println("第二种方式耗时:" + String.valueOf(System.currentTimeMillis() - startTime1)); } } }
public static void main(String[] args) { strCountWithIterator("aaaasfasdfwaerwefasfasfwaaafsafdsfasfsdafsfasdfasdfasdfwaerwefsafdsafsdfdsafasfsfasdfasfsdahfkshfgkdsafgkasgdsfsadftwerwesfdsaafafasfsdafasfaaafadfasfasfadfasdfaafafafdsfasa", "aa"); strCountWithIteratorTwo("aaaasfasdfwaerwefasfasfwaaafsafdsfasfsdafsfasdfasdfasdfwaerwefsafdsafsdfdsafasfsfasdfasfsdahfkshfgkdsafgkasgdsfsadftwerwesfdsaafafasfsdafasfaaafadfasfasfadfasdfaafafafdsfasa", "aa"); }}
//结果值:第一种统计方式出现次数为:9第一种方式耗时:1第二种统计方式出现的次数:9第二种方式耗时:0

这里自己只想出了这两种方案,如果你有更好的方案,随时交流哦~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存