代码之家  ›  专栏  ›  技术社区  ›  James Wierzba

JavaStringTokenizer.countTokens()的时间复杂度是多少

  •  3
  • James Wierzba  · 技术社区  · 8 年前

    我希望它具有恒定的时间复杂性,但它的名字暗示它实际上是在计算代币。

    3 回复  |  直到 8 年前
        1
  •  5
  •   Jacob G.    8 年前

    如果您好奇的话,下面是实现:

    public int countTokens() {
        int count = 0;
        int currpos = currentPosition;
        while (currpos < maxPosition) {
            currpos = skipDelimiters(currpos);
            if (currpos >= maxPosition)
                break;
            currpos = scanToken(currpos);
            count++;
        }
        return count;
    }
    

    我不太熟悉 StringTokenizer ,但假设 maxPosition skipDelimiters 和 scanToken .

        2
  •  3
  •   GBlodgett    8 年前

    OpenJDK的api说: http://www.docjar.com/html/api/java/util/StringTokenizer.java.html

    public int countTokens() {
        int count = 0;
        int currpos = currentPosition;
    
        while (currpos < maxPosition) {    
             currpos = skipDelimiters(currpos);  
             if (currpos >= maxPosition)   
                break;    
    
             currpos = scanToken(currpos);    
             count++;    
         }    
         return count; 
     }
    

        3
  •  0
  •   Lie Ryan Bryan    8 年前

    不,不是固定时间,而是 ω(n) 哪里 n

    StringTokenizer的简单实现应该 O(n * d) 哪里 d 是分隔符的数目。