java面試冷知識 string的indexof

      java中String的玩法還真多,本文介紹的的是indexof這個查找字串的實現。java

      說到查找子串,最原始的算法就是先找到第一個字符是匹配的,而後從這個字符串開始日後比對,直到和子串徹底匹配。不少人的第一反應確定是這個算法很low,你起碼說個KMP什麼的才上檔次。因此在不少人印象裏java定不會用這麼low的算法,就算面試被問到,也不敢這麼回答,如今你能夠大膽說,若是面試官嘲笑你,請用經典名句:Talk is cheapshow me the code。面試

        for (int i = sourceOffset + fromIndex; i <= max; i++) {
            //直到找到第一個匹配的字符
            if (source[i] != first) {
                while (++i <= max && source[i] != first);
            }
            //從第一個字符後開始查找
            if (i <= max) {
                //此時i爲第一個匹配的字符,j是要開始比對的第二個字符
                int j = i + 1;
                //end是完整匹配最後的字符的位置,targetCount就是子串的長度 
                int end = j + targetCount - 1;
                for (int k = targetOffset + 1; j < end && source[j]
                        == target[k]; j++, k++);
                if (j == end) {
                    //此時查找到,返回結果位置
                    return i - sourceOffset;
                }
            }
        }

      通過驗證,1.6,1.7,1.8都是這麼實現的。這幾個版本的回答不須要猶豫。算法

相關文章
相關標籤/搜索