자바 빠른 메서드가 이미 길이를 검사하기 때문에 테스트 할 특수 문자열을 선택했습니다. 문자열의 길이가 다른 경우 (기본적으로 contains
은 하나만 잘라집니다. 첫 번째 인수의 길이가 더 짧은 지 확인한 직후). 또한 contains
단축키 이후로 더 이상 참이 될 수 없다는 것을 알게되었으므로, 끝 부분 만 다를뿐입니다. 둘 다 정말로 긴 문자열입니다. 실제 세계에서 이러한 문자열을 만날 가능성은 없습니다.
이 접근법은 전체 검사를 두 번하고 한 번만하지만 차이는 무시할 수 있기 때문에 2 배 빠릅니다. 실제 벤치 마크에서는 훨씬 더 작습니다. 그리고 문자열은 그 차이가 최대 가능하기 때문에 뽑혔다. 그래서 ...
결론적으로 그것은 원하는대로 좋지만 실제로 나에게이 버전은 더 깨끗해진다.
public static void main(String[] args) {
String a = "";
String b = "";
Random random = new Random();
StringBuilder builder = new StringBuilder(119999999);
for(long i = 0; i < 119999999; i++)
builder.append((char) random.nextInt());
a = builder.toString() + "zzzzzzzzz";
b = a.substring(0, a.length() - 9) + "dsadsasda";
Instant start = Instant.now();
boolean test = a.length() > b.length() ? a.contains(b) : b.contains(a);
//boolean test = a.contains(b) || b.contains(a);
if(test)
System.out.println("OK");
System.out.println(Duration.between(start, Instant.now()).toMillis());
}
여기서 개선 할 필요는 없습니다. – notyou
개선 사항을 원하면 어떻게해야합니까? 물론 문자열 중 하나에 다른 문자열이 들어 있는지 확인하고 그 외에 호출하는 메서드를 제공하거나 사용할 수 있습니까? 메소드를 작성하는 방법에 대한 힌트 : 처음에는 그 문자열 중 더 긴 문자열을 확인한 다음 다른 방법으로는 사용할 수 없으므로'longer.contains (short) '를 확인하십시오. 둘 다 길이가 같으면 그냥 선택하십시오. 하나는 "길다". _ 긴 _ 아티스트 이름이 없으면이 차이가별로 없을 것입니다. – Thomas