LeetCode 1618. Maximum Font to Fit a Sentence in a Screen Solution in Java, C++, Python & JavaScript | Explanation + Code

CoderIndeed
0
1618. Maximum Font to Fit a Sentence in a Screen

Description

You are given a string text. We want to display text on a screen of width w and height h. You can choose any font size from array fonts, which contains the available font sizes in ascending order.

You can use the FontInfo interface to get the width and height of any character at any available font size.

The FontInfo interface is defined as such:


interface FontInfo {

  // Returns the width of character ch on the screen using font size fontSize.

  // O(1) per call

  public int getWidth(int fontSize, char ch);



  // Returns the height of any character on the screen using font size fontSize.

  // O(1) per call

  public int getHeight(int fontSize);

}

The calculated width of text for some fontSize is the sum of every getWidth(fontSize, text[i]) call for each 0 <= i < text.length (0-indexed). The calculated height of text for some fontSize is getHeight(fontSize). Note that text is displayed on a single line.

It is guaranteed that FontInfo will return the same value if you call getHeight or getWidth with the same parameters.

It is also guaranteed that for any font size fontSize and any character ch:

    <li><code>getHeight(fontSize) &lt;= getHeight(fontSize+1)</code></li>
    
    <li><code>getWidth(fontSize, ch) &lt;= getWidth(fontSize+1, ch)</code></li>
    

Return the maximum font size you can use to display text on the screen. If text cannot fit on the display with any font size, return -1.

 

Example 1:


Input: text = "helloworld", w = 80, h = 20, fonts = [6,8,10,12,14,16,18,24,36]

Output: 6

Example 2:


Input: text = "leetcode", w = 1000, h = 50, fonts = [1,2,4]

Output: 4

Example 3:


Input: text = "easyquestion", w = 100, h = 100, fonts = [10,15,20,25]

Output: -1

 

Constraints:

    <li><code>1 &lt;= text.length &lt;= 50000</code></li>
    
    <li><code>text</code> contains only lowercase English letters.</li>
    
    <li><code>1 &lt;= w &lt;= 10<sup>7</sup></code></li>
    
    <li><code>1 &lt;= h &lt;= 10<sup>4</sup></code></li>
    
    <li><code>1 &lt;= fonts.length &lt;= 10<sup>5</sup></code></li>
    
    <li><code>1 &lt;= fonts[i] &lt;= 10<sup>5</sup></code></li>
    
    <li><code>fonts</code> is sorted in ascending order and does not contain duplicates.</li>
    

Solutions

Solution 1

PythonJavaC++JavaScript
# """ # This is FontInfo's API interface. # You should not implement it, or speculate about its implementation # """ # class FontInfo(object): # Return the width of char ch when fontSize is used. # def getWidth(self, fontSize, ch): # """ # :type fontSize: int # :type ch: char # :rtype int # """ # # def getHeight(self, fontSize): # """ # :type fontSize: int # :rtype int # """ class Solution: def maxFont( self, text: str, w: int, h: int, fonts: List[int], fontInfo: 'FontInfo' ) -> int: def check(size): if fontInfo.getHeight(size) > h: return False return sum(fontInfo.getWidth(size, c) for c in text) <= w left, right = 0, len(fonts) - 1 ans = -1 while left < right: mid = (left + right + 1) >> 1 if check(fonts[mid]): left = mid else: right = mid - 1 return fonts[left] if check(fonts[left]) else -1(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !