문자열 가정 합니다. 해당 문자열 중 하나가 컬렉션에있는 다른 문자열의 하위 문자열인지 알고 싶습니다. 즉, 다음 작업에 대한 알고리즘을 원합니다.
입력 :
출력 : 예 : 는 및 의 하위 문자열 임 ) 또는 그러한 가 없는 경우 None
이를위한 효율적인 알고리즘이 있습니까?
"substring"을 "prefix"로 바꾸면 효율적인 알고리즘이 있습니다 (문자열을 정렬 한 다음 선형 스캔을 수행하여 인접한 문자열을 비교합니다. 정렬하면 하위 문자열이 인접 해 있음). 그러나 문자열이 다른 문자열의 하위 문자열인지 테스트하는 것이 더 어려워 보입니다. 순진한 알고리즘은 모든 쌍 를 반복하는 것이지만 하위 문자열 테스트가 필요합니다. 더 효율적인 알고리즘이 있습니까?
이것을 "모든 쌍 하위 문자열 테스트"또는 이와 유사한 것으로 부를 수있을 것 같습니다.
내 궁극적 인 목표는 컬렉션에서 다른 문자열을 제거하여 문자열을 다른 문자열로 만들지 않도록 컬렉션을 정리하는 것입니다.