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 |
댓글