작업은 다음과 같습니다. 문자열과 비어 있지 않은 하위 문자열 하위가 주어지면 시작하고 끝나는 sub로 길이가 가장 큰 최대 하위 문자열을 재귀 적으로 계산합니다.sub로 시작하고 끝나는 최대 서브 문자열을 계산하고 길이를 반환합니다.
예 :
strDist("catcowcat", "cat") → 9
strDist("catcowcat", "cow") → 3
strDist("cccatcowcatxx", "cat") → 9
당신이 내 코드를보고 그것으로 문제가 무엇인지 말해 주시겠습니까?
public int strDist(String str, String sub)
{
if(str.length()<sub.length())
return 0;
if(str.length()==sub.length()&&str.equals(sub))
return str.length();
if(str.length()<2)
{
if(str.contains(sub))
{
return 1;
}
return 0;
}
if (str.length()==2)
{
if (sub.length()==2 && str.equals(sub))
return 2;
if (str.contains(sub))
return 1;
return 0;
}
if(str.length()>2)
{
if(str.startsWith(sub)&&str.endsWith(sub))
{
return str.length();
}
if(str.substring(0,sub.length()).equals(sub))
{
strDist(str.substring(0,str.length()-2),sub);
}
if(str.substring(str.length()-sub.length(),str.length()-1).equals(sub))
strDist(str.substring(1,str.length()-1),sub);
}
return strDist(str.substring(1,str.length()-1),sub);
}
이 경우 strDist("hiHellohihihi", "hih")
→ 5 과 0을 반환 작동하지 않습니다.
를 사용하여 O (N) 솔루션을 포함했다! 귀하의 모범에서 어떻게 작동합니까? 의사 코드를 사용할 수 있습니다. –
힌트 : 단위 테스트를위한 코드는 ** 완벽 **합니다. 예상 결과를 확인하는 알려진 입력에 대한 테스트를 작성해야합니다. 그러면 코드를 다른 사람 앞에서 던지기보다 코드를 평가하는 것이 훨씬 더 낫습니다. 코드를 읽는 것이 다소 어렵습니다. 체인이 길면 길다. 복잡한 조건과 많은 메소드 호출 ... 이상적으로 소화하기 쉽지 않다 ... 나는 또한 당신의 예제 **가 불분명하다는 것을 발견했다 **.암소로 시작하고 끝나는 ** no ** 부분 문자열이 있으므로 길이는 3이 될 수 있습니까? 0일까요? – GhostCat
코드를 자세히 살펴 보지 않고 마지막 두 if 조건은'strDist'를 재귀 적으로 호출하지만 반환 값은 무시합니다. 아마도 오류라고 생각할 것입니다. –