본문 바로가기
Java

java string contains time complexity (java string contains 시간복잡도)

by 무대포 개발자 2020. 10. 6.
728x90
반응형

java string contains time complexity

  • 결론만 얘기하면 O(nm) 이다.
  • n 은 string 길이. m 은 찾고자하는 string 길이

증명

  • 아래 내용을 보면 contains 는 indexOf 를 호출하고, IndexOf 는 최악의 경우 O(nm) 인 것을 알 수 있다.
  • 아래 소스는 자바 String 소스이다.

public boolean contains(CharSequence s) {
        return indexOf(s.toString()) > -1;
    }


static int indexOf(char[] source, int sourceOffset, int sourceCount,
            char[] target, int targetOffset, int targetCount,
            int fromIndex) {
        if (fromIndex >= sourceCount) {
            return (targetCount == 0 ? sourceCount : -1);
        }
        if (fromIndex < 0) {
            fromIndex = 0;
        }
        if (targetCount == 0) {
            return fromIndex;
        }

        char first = target[targetOffset];
        int max = sourceOffset + (sourceCount - targetCount);

        for (int i = sourceOffset + fromIndex; i <= max; i++) {
            /* Look for first character. */
            if (source[i] != first) {
                while (++i <= max && source[i] != first);
            }

            /* Found first character, now look at the rest of v2 */
            if (i <= max) {
                int j = i + 1;
                int end = j + targetCount - 1;
                for (int k = targetOffset + 1; j < end && source[j]
                        == target[k]; j++, k++);

                if (j == end) {
                    /* Found whole string. */
                    return i - sourceOffset;
                }
            }
        }
        return -1;
    }

'Java' 카테고리의 다른 글

singleton pattern 설명  (0) 2020.10.29
람다식 정리  (0) 2020.10.10
java gc 모니터링 (jstat)  (0) 2020.08.29
Java hashmap 설명  (0) 2020.08.27
CheckedException vs UnCheckedException  (0) 2020.08.08

댓글