문자열 반전

10649 단어 pythonchallenge

문제 설명: 주어진 문자열에서 단어를 뒤집는 함수를 작성하십시오. 또한 파이썬 내장 함수를 사용하지 않고 솔루션을 제공하십시오.



난이도: 쉬움



제약


  • 주어진 문자열이 ASCII라고 가정할 수 있습니까?


  • 이 대소문자를 구분합니까?



  • 이것이 기억에 적합하다고 가정할 수 있습니까?



  • 추가 데이터 구조를 사용할 수 있습니까?


  • 테스트 케이스


  • 없음 --> 없음
  • 존은 어때? --> ? 존 당신은 어떻게
  • 1 --> 1
  • 굉장해 --> 굉장해

  • 연산



  • 솔루션 1
  • Python 문자열은 변경할 수 없으므로 공백을 기준으로 문자열을 분할하고 목록으로 변환합니다.
  • i = 0
  • 에서 시작하여 len(list)/2번 반복
  • 인덱스 (i)에 있는 요소를 인덱스 (len(list) - 1 -i)에 있는 요소로 교환
  • 증분 i



  • 솔루션 2 : split 기능을 사용하지 않고
  • words 목록을 초기화합니다.
  • 문자열 길이까지 문자열 인덱스를 반복합니다.
  • 문자열의 문자가 공백이 아닌 경우 이는 단어의 시작 인덱스입니다
  • .
  • word_start를 문자 인덱스로 설정
  • 공백이 발생할 때까지 문자열 길이까지 다시 반복합니다
  • .
  • 증분 i
  • 이 반복이 중지되면 word_start에서 i까지를 단어 목록
  • 에 추가합니다.

  • 문자열이 끝날 때까지 반복하고 증가시킵니다. i
  • 단어 목록을 반환합니다.



  • 솔루션 3 : 한 줄 파이썬 솔루션(내장 함수 사용)
  • split 함수를 사용하여 문자열을 공백으로 분할하고 슬라이스 연산을 사용하여 목록을 반전하고 마지막으로 join 함수를 사용하여 반전된 문자열을 반환합니다.


  • 시간 및 공간 복잡성



  • 솔루션 1
  • 시간 복잡도: O(n)
  • 공간 복잡도: O(n)



  • 솔루션 2
  • 시간 복잡도: O(n)
  • 공간 복잡도: O(n)


  • 암호



    class SentenceReversal(object):
        def sentenceReversal(self, string):
            if string is None:
                return None
            words = string.split()
            size = len(words)
            for word in range(size//2):
                words[word], words[size - 1 - word] = \
                    words[size - 1 - word], words[word]
            return " ".join(words)
    
        def sentenceReversal2(self, string):
            if string is None:
                return None
            words = []
            size = len(string)
            spaces = [' ']
            i = 0
    
            while i < size:
                if string[i] not in spaces:
                    word_start = i
                    while i < size and string[i] not in spaces:
                        i += 1
                    words.append(string[word_start:i])
                i += 1
            return " ".join(words[::-1])
    
        def sentenceReversal3(self, string):
            if string is None:
                return None
            return " ".join(string.split()[::-1])
    

    단위 테스트



    import unittest
    from sentenceReversal import SentenceReversal
    
    
    class TestSentenceReversal(unittest.TestCase):
        def testSentenceReversal(self, func):
            self.assertEqual(func(None), None)
            self.assertEqual(func('   space before plague'), 'plague before space')
            self.assertEqual(func('space after    '), 'after space')
            self.assertEqual(func(' Hello John  how are you   ?'),
                             '? you are how John Hello')
            self.assertEqual(func('1'), '1')
            print("ALL TEST CASES PASSED")
    
    
    def main():
        test = TestSentenceReversal()
        sent = SentenceReversal()
        test.testSentenceReversal(sent.sentenceReversal)
        test.testSentenceReversal(sent.sentenceReversal2)
    
    
    if __name__ == "__main__":
        main()
    

    Original article

    Github solution

    행복한 코딩!

    좋은 웹페이지 즐겨찾기