Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 문자열을 작성할 줄 수

<시간/>

문자열 S가 있고 주어진 문자열의 문자를 왼쪽에서 오른쪽으로 줄에 써야 한다고 가정합니다. 여기서 각 줄의 최대 너비는 100단위이며, 글자를 쓰면 줄의 너비가 100단위를 초과하면 다음 줄에 기록됩니다. 우리는 또한 배열 너비를 가지고 있습니다. 여기에서 widths[0]은 'a'의 너비이고, widths[1]은 'b'의 너비입니다.

우리는 두 가지 질문에 대한 답을 찾아야 합니다 -

  • S의 문자가 하나 이상 포함된 줄 수
  • 마지막 줄에 사용된 너비는 얼마입니까?

답은 길이가 2인 정수 목록으로 반환됩니다.

따라서 입력이 [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 10,10,10,10,10] 및 S ="bbbcccdddaaa"인 경우 'a'를 제외한 모든 문자의 길이가 10이고 문자열 "bbbcccdddaa"가 포함되므로 출력은 [2, 4]가 됩니다. 9 * 10 + 2 * 4 =98칸. 마지막 'a'는 첫 번째 줄에 2단위만 남아 있기 때문에 두 번째 줄에 쓴다. 따라서 답은 2줄에 두 번째 줄에 4단위를 더한 것입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 줄:=1, 개수:=0
  • S의 각 i에 대해 다음을 수행합니다.
    • count :=개수 + 너비[i의 ASCII - 97]
    • 카운트> 100이면
      • 줄 :=줄 + 1
      • count :=너비[i의 ASCII - 97]
  • [줄, 개수] 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution:
   def numberOfLines(self, widths, S):
      line = 1
      count = 0
      for i in S:
         count += widths[ord(str(i))-97]
      if count > 100:
         line += 1
      count = widths[ord(str(i))-97]
   return [line, count]
ob = Solution()
print(ob.numberOfLines([4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10], "bbbcccdddaaa"))

입력

[4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],"bbbcccdddaaa"

출력

[2, 4]