한 단어 에 중복 자모 가 있 는 지 판단 하 다.

오늘 오전 에 한 문 제 를 풀 었 는데 대체적으로 한 단어 에 중복 되 는 자모 가 있 는 지 없 는 지 를 판단 하 는 방법 을 썼 다.나의 생각 은 한 글자 한 글자 씩 옮 겨 다 니 는 것 이다. 만약 에 중복 되 는 정지 가 발견 된다 면:
function isIsogram(str) {
  str = str.toLowerCase();
  
  for (var i = 0; i < str.length; i++) {
    if (str.indexOf(str.charAt(i), i + 1) >= 0) {
      return false;
    }
  }
  
  return true;
}
 
이런 간단 한 장면 에서 성능 을 이야기 하 는 것 은 아무런 의미 가 없고 두 번 의 순환 속도 가 결코 느 리 지 않다 (
str.indexOf() 한 번 의 순환 이 라 고도 생각 하지만 네 이 티 브 의 행동 이 라 속도 가 빠르다).나중에 나 는 다른 정규 적 인 실현 을 보 았 다. 비록 매우 간단 하지만 처음에 나 는 이런 생각 을 하지 않 았 다.
function isIsogram2(str) {
  return !/(.).*\1/i.test(str);
}
 
또는:
function isIsogram2(str) {
  return !/^.*(.).*\1/i.test(str);
}
 
이 두 가 지 는 사실 별 차이 가 없다. 전 자 는 문자열 의 끝 을 우선 찾 고 후 자 는 문자열 의 앞부분 을 우선 찾는다.이 정규 가 비교적 이해 하기 쉽 고 설명 이 많 지 않 으 며 나 를 놀 라 게 하 는 이 일치 하 는 성능 이다.하나의 문자열 에 중복 문자 가 있 는 지 판단 하 는 작업 은 너무 간단 합 니 다. 너무 간단 하기 때문에 목표 문자열 을 대표 하 는 규칙 성 이 너무 작 습 니 다.정 칙 을 사용 하면 대량의 시도 와 역 추적 을 가 져 올 수 밖 에 없 는데 사실은 주관적 으로 성능 이 매우 좋 지 않다 고 느 낄 수 있다.그러나 좋 고 나 쁨 은 마음대로 생각하면 되 는 것 이 아니 라 검증 해 야 한다.결정적 으로 좋 은 지 나 쁜 지 는 물론 최 악의 상황 에서 두 알고리즘 의 실행 시간 을 본다.이런 단 어 를 구성한다.
qwertyuiopas 는 자모 중복 이 없 으 며 두 가지 알고리즘 이 모두 완전한 순환 을 해 야 한 다 는 것 을 의미한다.
console.time("loop");
for(var i=0; i<400000; i++){
    isIsogram("qwertyuiopas");
}
console.timeEnd("loop");
 
console.time("regexp");
for(var i=0; i<400000; i++){
    isIsogram2("qwertyuiopas");
}
console.timeEnd("regexp");
  운행 결과 보기: amazing!이 실험 은 자 바스 크 립 트 가 정규 에 대해 확실히 최적화 되 어 정규 사용 의 효율 이 매우 높다 는 문 제 를 실증 하 였 다.물론 이 말 도 거꾸로 이해 할 수 있 습 니 다. 자바 script 의 문자열 작업, 순환 이 너무 느 립 니 다.그럼 정규 에 대해 서 뭘 더 기다 리 고 있 는 지 빨리 써 라.  주 예

좋은 웹페이지 즐겨찾기