表驱动分为三种,分别是:直接索引、索引表、阶梯索引

 表驱动分为三种,分别是:直接索引、索引表、阶梯索引。一般直接索引使用比较广泛,也容易想到。今天在网上看到了一笔试题,统计一个字符串中第一次出现且频率最高的字符。看到这道题以后,我觉得使用表驱动能很快、很容易地解决问题,下面是我使用表驱动给出的解法。
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. }

这是我对表驱动的一点认识,我觉得选择表驱动,提高代码的执行效率以及可读性,但同时却牺牲了存储空间。如果在不浪费大量空间的前提下,表驱动的确是一个不错的选择。
posted @ 2011-07-13 20:50  Lunaa  阅读(666)  评论(0编辑  收藏  举报