zoukankan      html  css  js  c++  java
  • 表驱动分为三种,分别是:直接索引、索引表、阶梯索引

     表驱动分为三种,分别是:直接索引、索引表、阶梯索引。一般直接索引使用比较广泛,也容易想到。今天在网上看到了一笔试题,统计一个字符串中第一次出现且频率最高的字符。看到这道题以后,我觉得使用表驱动能很快、很容易地解决问题,下面是我使用表驱动给出的解法。
    Java代码 复制代码 收藏代码
    1. public static char statMostRateChar(String str) {
    2. if (str != null && !"".equals(str)) {
    3. int charsStat[] = new int[128];
    4. int charsFirstIdx[] = new int[128];
    5. int strLen = str.length();
    6. for (int ch = 0; ch < 128;ch++) {
    7. charsFirstIdx[ch] = strLen;
    8. }
    9. // 統計字符出現的次數
    10. for (int idx = 0; idx < strLen; idx++) {
    11. charsStat[str.charAt(idx)]++;
    12. // 记录字符第一次出现的位置
    13. if (idx < charsFirstIdx[str.charAt(idx)]) {
    14. charsFirstIdx[str.charAt(idx)] = idx;
    15. }
    16. }
    17. int mostRateChar = 0;
    18. for (int ch = 1; ch < 128; ch++) {
    19. if (charsStat[ch] == 0) {
    20. continue;
    21. }
    22. // 找频率出现最高的字符
    23. if (charsStat[mostRateChar] < charsStat[ch]) {
    24. mostRateChar = ch;
    25. // 出现频率一样时,选择出现在前面的数
    26. } else if (charsStat[mostRateChar] == charsStat[ch]&&
    27. charsFirstIdx[mostRateChar] > charsFirstIdx[ch]) {
    28. mostRateChar = ch;
    29. }
    30. }
    31. return (char) mostRateChar;
    32. } else {
    33. return '\0';
    34. }
    35. }

    这是我对表驱动的一点认识,我觉得选择表驱动,提高代码的执行效率以及可读性,但同时却牺牲了存储空间。如果在不浪费大量空间的前提下,表驱动的确是一个不错的选择。
  • 相关阅读:
    webrtc系列之-像老鼠一样打洞
    Ubuntu记录用户IP访问操作信息工具
    OPENVIDU实现同一用户同时发布多个流媒体
    如何使用Nginx-rtmp搭建简易的HLS直播系统
    python实现数据库主从状态监控
    简单分析实现运维利器---批量操作bashshell
    《我与Windows Server 2008R2那点事儿》之域控账户故障事件
    常用动态路由协议之IS-IS
    在云服务器上搭建Python开发环境
    基于Python3接口自动化测试开发相关常用方法
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717596.html
Copyright © 2011-2022 走看看