한 단어 에 중복 자모 가 있 는 지 판단 하 다.
1788 단어 JavaScript알고리즘문자열
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 의 문자열 작업, 순환 이 너무 느 립 니 다.그럼 정규 에 대해 서 뭘 더 기다 리 고 있 는 지 빨리 써 라. 주 예
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.