js 이상 한 면접 문제 가 나 왔 습 니 다.
A, B, C 는 3 개의 문자열 이다.A 에 포 함 된 모든 B 를 C 로 교체 하고 교체 후에 B 가 있 으 면 A 가 B 를 포함 하지 않 을 때 까지 계속 교체 합 니 다
4. 567917. 프로그램 을 작성 하여 상기 기능 을 실현 하 십시오.시스템 에서 제공 하 는 문자열 비교, 찾기, 교체 함 수 를 사용 할 수 없습니다
4. 567917. 이상 프로그램 은 항상 결 과 를 정상적으로 출력 할 수 있 습 니까?만약 그렇지 않다 면, 어떤 상황 에서 정상적으로 출력 할 수 없 는 결 과 를 열거 하고, 가능 한 한 상세 하고 전면적으로..
전혀 이런 문 제 는 아니 지만 알고리즘 문제 임 을 알 수 있 고 문자열 을 찾 지 못 하 는 것 은 어 려 운 부분 입 니 다.
솔 루 션 문자열 을 바 꾸 려 면 KMP 나 BF 알고리즘 js 를 사용 해 야 합 니 다.
// KPM
//
function initTable( str ){
let arr = str.split('');//
let table = [];
//
//
function _getFitValue( partString ){
let partFitValue = 0;
let prefixArr = []; //
let suffixArr = []; //
//
function _getSameLength( arr1, arr2 ){
for(let i of arr1){
for(let j of arr2){
if(i==j){
console.log(' ', i)
return i.length;
}
}
}
return 0;
}
//
if( partString.length > 2 ) {
for ( let i = 1; i < partString.length ; i++ ) {
let j = partString.length - i;
prefixArr.push( partString.substr( 0, i ) );
suffixArr.push( partString.substr( i, j ) );
}
console.log('prefixArr',prefixArr);
console.log('suffixArr',suffixArr);
partFitValue = _getSameLength( prefixArr, suffixArr );
return partFitValue;
} else {
return partFitValue;
}
}
for( let i = 0; i < arr.length; i++ ) {
let testStr = str.substr(0,i+1);
console.log('testStr', testStr)
table[i] = _getFitValue( testStr );
}
return table;
};
let table = initTable('ABCDABD');
console.log('table', table);
// KMP a b b a -1
function KMP(sourceStr, searchStr) {
//
let part = initTable(searchStr);
let sourceLength = sourceStr.length;
let searchLength = searchStr.length;
let result;
let i = 0;
let j = 0;
for (; i < sourceStr.length; i++) { // ,
//
for (j = 0; j < searchLength; j++) {
//
if (searchStr.charAt(j) === sourceStr.charAt(i)) {
//
if (j == searchLength - 1) {
result = i - j;
break;
} else {
// , ,i++
i++;
}
} else {
// i
if (j > 1 && part[j - 1] > 0) {
i += (i - j - part[j - 1]);
} else {
//
i = (i - j)
}
break;
}
}
if (result || result === 0) {
break;
}
}
if (result || result == 0) {
return result
} else {
return -1;
}
}
let index = KMP('BBC ABCDAB ABCDABCDABDE','ABCDABD');
function replaceString( a, b, c ){
while(true){
let num = KMP( a, b );// indexOf()
if( num !== -1 ){
let a_chars = a.split('');
a = "";
let count = 0;
for ( let i = 0; i < a_chars.length; i++ ) {
if( i >= num && (i < num + b.length)){
if( count === 0 ) {
a = a + c;
}
count++;
} else {
a = a + a_chars[i];
}
}
} else {
return a;
}
}
}
// : c b
replaceString('cccccc','c','bc');
인용 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.