린트 코드 질문 기록 3

巴扎黑
풀어 주다: 2017-06-23 15:49:04
원래의
1770명이 탐색했습니다.

Expression Expand Word Break II Partition Equal Subset Sum

Expression Expand

문자열 확장 문제, [] 앞의 숫자에 따라 문자열을 확장하고, 주로 두 개의 스택을 유지하는데, 하나는 숫자 스택을 확장하는 것이고 다른 하나는 콘텐츠 스택 확장, 콘텐츠 스택 추가 [확장할 콘텐츠를 모두 밀어낼지 여부를 결정하는 데 사용되며 숫자는 두 자리 이상일 수 있으므로 중요하지 않습니다.

class Solution:# @param {string} s  an expression includes numbers, letters and brackets# @return {string} a stringdef expressionExpand(self, s):# Write your code herenl=[]
        sl=[]
        sc=''res=''lstr=''for i in s:if i.isdigit():if not lstr.isdigit():
                    sl.append(sc)
                    sc=''sc = sc + ielse:if i=='[':
                    nl.append(int(sc))
                    sc = ''sl.append('[')elif i==']':
                    n=nl.pop()while len(sl)>0:
                        k=sl.pop()if k== '[':breaksc = k+ sc
                    ts=''for j in range(n):ts= ts + sc
                    sc=''if len(nl) > 0:sl.append(ts)else:
                        res = res + tselse:if len(nl)>0:
                        sc = sc + ielse:
                        res = res + i
            lstr=ireturn res
로그인 후 복사

Word Break. II

단어 분할 문제, 배열에서 처음부터 문자열 검색을 시작하고, 발견되면 스택에 추가하고, 팝된 문자열이 완전한지 확인하기 위해 매번 pop을 반복하고, 완성되면 결과를 추가합니다. 완료되지 않은 경우 후속 조치를 찾으십시오. 후속 조치를 찾으면 스택에 추가하고 다음 루프는 계속되지 않습니다. wordDict에 문자열이 있을 수 있습니다. 재사용될까?

문자열이 매우 길고 그 뒤에 사전 배열이 많으면 속도가 매우 느려질 것입니다. 현재로서는 어떤 최적화 알고리즘도 생각해 본 적이 없습니다. lintcode.특수한 경우가 하나 있어서 앞에 필터를 추가했는데 통과됐는데, 파이썬의 startwith 함수도 주의해야 합니다.

매개변수가 ''이면 항상 True를 반환하는데 좀 까다롭습니다. .. , 조건은 많은 숫자가 100을 초과하지 않는 정수이고 배열의 길이가 200을 초과하지 않아야 한다는 것입니다. 이것은 배낭 문제의 단순화된 버전입니다. 모든 숫자의 합이며, 짝수이면 두 그룹으로 나눌 수 있으며, 그렇지 않으면 바로 false를 반환한 후 그룹의 최종 합을 구합니다. 배낭 문제의 용량은 배낭에 넣을 물건과 비슷합니다. 배낭 문제와 다른 점은 배낭 문제에서는 그리드 값만 있으면 충분하다는 것입니다. 이 합계와 같습니다. 마지막 그리드까지 이동할 필요는 없습니다

class Solution:# @param {string} s a string# @param {set[str]} wordDict a set of wordsdef wordBreak(self, s, wordDict):# Write your code herehead=[]
        ss=''for i in s:if ss=='':
                ss=ielse:if i not in ss:
                    ss = ss + ifor i in ss:
            flag=Falsefor di in wordDict:if i in di:
                    flag=Truebreak;if not flag:return []for di in wordDict:if di !='' and  s.startswith(di):
                head.append(di)if len(head)<1:return []
        cur=s
        res=[]while len(head)>0:
            h=head.pop()
            le=len(h.replace(' ',''))
            cur=s[le:]if cur == '': 
                res.append(h)continuefor di in wordDict:if cur.startswith(di):
                    head.append(h+' '+di)                    return res
로그인 후 복사

위 내용은 린트 코드 질문 기록 3의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!