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. }

    这是我对表驱动的一点认识,我觉得选择表驱动,提高代码的执行效率以及可读性,但同时却牺牲了存储空间。如果在不浪费大量空间的前提下,表驱动的确是一个不错的选择。
  • 相关阅读:
    ●SPOJ 8222 NSUBSTR–Substrings(后缀自动机)
    ●SPOJ 1811 Longest Common Substring
    ●POJ 1509 Glass Beads
    ●BZOJ 4556 [Tjoi2016&Heoi2016]字符串
    ●BOZJ 2229 [Zjoi2011]最小割
    ●BOZJ 4456 [Zjoi2016]旅行者
    ●观光(17.12.02多校联测题目)
    ●BZOJ 2007 NOI 2010 海拔
    mysql--->B+tree索引的设计原理
    mysql--->权限管理原理和设置
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717595.html
Copyright © 2011-2022 走看看