더 큰이 큰

주제 :

문자열을 처리 할 때 사전 식 순서는 종종 알파벳 순서로 알려져 있습니다. 그것은하는 사전 식 단어 list.Given 분류에서 나중에 오는 그 문자의 일부 또는 전부를 교환하여 새로운 단어를 만드는 경우 문자열이 다른 문자열보다 큽니다. 이 새로운 단어는 두 가지 기준을 충족해야합니다 : (1) 원래 단어보다 커야합니다. (2) 아래의 기능 biggerIsGreater 만들고 새 문자열 회의에게 기준을 반환하는 최초의 condition.Complete을 충족 작은 단어해야합니다. 그것이 불가능하다면, 아무 대답도 반환하지 않습니다.
附上链接: 더 큰이 큰

예비 논리

이 논리는 내 구현 코드 Tieshanglai에 직접 말로 설명하기 어렵다

def biggerIsGreater(s):
    i = 1
    j = i + 1
    while j > len(w) or w[-j] >= w[-i]:
        if j > len(w):
            i += 1
            j = i + 1
            if j > len(w):
                return 'no answer'
        else:
            j += 1
    else:
        l = list(s)
        l.insert(-j, s[-i])
        l.pop(-i)
        s = ''.join(l)
        s = ''.join((lambda x, y: x + y)(list(s[-j + 1:]), list(s[:-j + 1])))
        return s

논리 자체는 아무 문제 없지만, 세 가지 예는 초과 근무가 있음을 발견 할 것이다 아래로 실행

품질 로직

지난 시간 제한에 여러 개의 중첩 된 루프에 의해 발생하기 때문에 문제의 발견 후,하지만, 해결책을 찾을 수없는이는 현상은 시간 초과가 발생 여전히 하나의 사이클 분명히 할 수 있습니다
사이트 전능 토론과 함께, 다음 다음과 같이 다른 사람은, 아주 간단한 코드 발견

def biggerIsGreater(s):
    for i in range(len(s) - 1)[::-1]:
        if s[i] < s[i + 1]:
            for j in range(i + 1, len(s))[::-1]:
                if s[i] < s[j]:
                    lis = list(s)
                    lis[i], lis[j] = lis[j], lis[i]
                    return "".join(lis[:i + 1] + lis[i + 1:][::-1])
    return 'no answer'

그것은 분명 두 개의 중첩 루프, 왜 빠른 나보다 실행할 수 있습니다. . .
행동 안에 다른 I의 목록, 문자열이 많은 시간을 차지하기 때문에 초기 느낌이 있지만, 여전히 불분명 구체적인 이유는, 내가 그것을 설명 기꺼이 분명히 큰 형님이

추천

출처www.cnblogs.com/ilk123/p/11756474.html