2016-12-22 3 views
1

나는 Codingbat.com 연습을하고있다. 이 연습에 문제가 있습니다 : 문자열의 모든 'x'문자가 문자열의 뒷부분에 'y'문자가 있으면 문자열이 xy 균형을 유지한다고 가정합니다. 따라서 "xxy"는 균형을 이루지 만 "xyx"는 균형이 맞지 않습니다. 하나의 'y'는 여러 개의 'x'의 균형을 맞출 수 있습니다. 지정된 캐릭터 라인이 xy-balanced 인 경우는 true를 돌려줍니다. 다음과 같은 솔루션이 작동하지 않는 이유 다음 조건에서 내 코드가 false를 반환하는 이유는 무엇입니까?

xyBalance("aaxbby") → true 
xyBalance("aaxbb") → false 
xyBalance("yaaxbb") → false 

내가 올바른 해결책을 알고하지만 난에 관해서 궁금 해서요 :

public boolean xyBalance(String str) { 
    for(int i = 0; i < str.length() -1 ;i++) { 
    if(str.indexOf("x") == -1) { 
     return true; 
    } 
    else if(str.charAt(str.length()-1) == 'x') { 
     return false; 
    } 
    else if (str.indexOf("x",i) < str.indexOf("y",i)) { 
     return true; 
    } 
    } 
    return false; 
} 

이 코드 예제의 경우 두 제외한 모든 위해 일하고 :

xyBalance("y") → true **my code returns false** 

xyBalance("") → true **my code returns false** 

누군가 이유를 설명 할 수 있습니까? 덕분에 당신 =]

답변

0

String이 비어 있으면 루프가 입력되지 않으므로이 메서드는 자동으로 false을 반환합니다. 루프는 i = 0으로 시작하여 i < str.length() - 1 조건과 일치합니다. String이 비어 있고 자동으로 중단되므로 str.length() - 1이 -1로 평가됩니다.

어느 쪽이든,이 코드는 꽤 많은 계산 능력을 낭비합니다. 가능한 많은 간단한 해결책이 없습니다 : 더는 'X'가 발생하면

문제는

String이 균형로 번역 할 수는 후 String

의 마지막 'Y' 어떤 문제가 훨씬 간단합니다 :

public boolean xyBalanced(String s){ 
    return s.lastIndexOf('x') <= s.lastIndexOf('y'); 
} 
+0

설명해 주셔서 감사합니다! 나는 그것을 고맙게 여기고, 더 간단한 해결책을 가져 주셔서 감사합니다. 임마 초보자, 나는 그 하하에 대해 비록 결코 없을 것입니다 –

+0

@ PiyushKumar 도움을 기쁘게 :) – Paul

0

당신이 문자열 "y"에 대한 잘못된 결과를 얻고있는 이유는 대한 루프의 조건이 i < str.length() -1 때까지 실행하는 것입니다, 수정이 될 때까지 실행 상태를 변화 할 것입니다 : i < str.length() 그래서 당신 마지막 성격을 놓치지 않을 것이다.

빈 문자열에 코드를 실행하는 경우 문자열의 길이가 0이므로 for 루프에 전혀 들어 가지 않으므로 false을 반환하므로 실제로 결과가 좋습니다!

+0

설명해 주셔서 감사합니다! –