Conteo de líneas requeridas para escribir la string dada

Dada una string str y una array de enteros width[] donde: 
 

ancho[0] = ancho del carácter ‘a’ 
ancho[1] = ancho del carácter ‘b’ 
… 
ancho[25] = ancho del carácter ‘z’ 
 

La tarea es encontrar el número de líneas que tomará escribir la string str en un papel y el ancho de la última línea hasta la cual está ocupada. 
Nota: El ancho de una línea es de 10 unidades .
Ejemplos: 
 

Entrada: str = “bbbcccdddaa”, 
ancho[] = {4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1, 1, 1, 1} 
Salida: (2, 8) 
«bbbcccddd» cubrirá la primera línea (9 * 1 = 9 unidades) 
Como ‘a’ tiene un ancho de 4 que no puede caber en restante 1 unidad en la primera línea. 
Tendrá que ser escrito en la segunda línea. 
Entonces, la siguiente línea contendrá «aa» que cubre 4 * 2 = 8 unidades. 
Necesitamos 1 línea completa y una línea con un ancho de 8 unidades.
Entrada: str = “abcdefghijklmnopqrstuvwxyz”, 
ancho[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1, 1, 1, 1} 
Salida: (3, 6) 
Todos los caracteres tienen el mismo ancho de 1. Para escribir los 26 caracteres, 
Necesitamos 2 líneas completas y una línea con 6 unidades de ancho. 
 

Enfoque: Escribiremos cada carácter en la string str uno por uno. A medida que escribimos un carácter, actualizamos inmediatamente (líneas, ancho) que realiza un seguimiento de cuántas líneas hemos usado hasta ahora y cuál es la longitud del espacio usado en la última línea. 
Si el ancho [char] en str se ajusta a nuestra línea actual, lo agregaremos. De lo contrario, comenzaremos con una nueva línea
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// CPP implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the number of lines required
pair<int, int> numberOfLines(string S, int *widths)
{
    // If string is empty
    if (S.empty())
        return {0, 0};
 
    // Initialize lines and width
    int lines = 1, width = 0;
 
    // Iterate through S
    for (auto character : S)
    {
        int w = widths[character - 'a'];
        width += w;
 
        if (width >= 10)
        {
            lines++;
            width = w;
        }
    }
 
    // Return lines and width used
    return {lines, width};
}
 
// Driver Code
int main()
{
    string S = "bbbcccdddaa";
    int widths[] = {4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
 
    // Function call to print required answer
    pair<int, int> ans = numberOfLines(S, widths);
    cout << ans.first << " " << ans.second << endl;
 
    return 0;
}
 
// This code is contributed by
// sanjeev2552

Java

// JAVA implementation of the approach
class GFG
{
 
// Function to return the number of lines required
static int[] numberOfLines(String S, int []widths)
{
    // If String is empty
    if (S.isEmpty())
        return new int[]{0, 0};
 
    // Initialize lines and width
    int lines = 1, width = 0;
 
    // Iterate through S
    for (char character : S.toCharArray())
    {
        int w = widths[character - 'a'];
        width += w;
 
        if (width >= 10)
        {
            lines++;
            width = w;
        }
    }
 
    // Return lines and width used
    return new int[]{lines, width};
}
 
// Driver Code
public static void main(String[] args)
{
    String S = "bbbcccdddaa";
    int widths[] = {4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
 
    // Function call to print required answer
    int []ans = numberOfLines(S, widths);
    System.out.print(ans[0]+ " " + ans[1] +"\n");
}
}
 
// This code is contributed by Rajput-Ji

Python3

# Python3 implementation of the approach
 
# Function to return the number of lines required
def numberOfLines(S, widths):
 
    # If string is empty
    if(S == ""):
        return 0, 0
 
    # Initialize lines and width
    lines, width = 1, 0
 
    # Iterate through S
    for c in S:
        w = widths[ord(c) - ord('a')]
        width += w
        if width > 10:
            lines += 1
            width = w
 
    # Return lines and width used
    return lines, width
 
 
# Driver Code
S = "bbbcccdddaa"
Widths = [4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
 
# Function call to print required answer
print(numberOfLines(S, Widths))

C#

// C# implementation of the approach
using System;
 
class GFG
{
 
// Function to return the number of lines required
static int[] numberOfLines(String S, int []widths)
{
    // If String is empty
    if (S.Length == 0)
        return new int[]{0, 0};
 
    // Initialize lines and width
    int lines = 1, width = 0;
 
    // Iterate through S
    foreach (char character in S.ToCharArray())
    {
        int w = widths[character - 'a'];
        width += w;
 
        if (width >= 10)
        {
            lines++;
            width = w;
        }
    }
 
    // Return lines and width used
    return new int[]{lines, width};
}
 
// Driver Code
public static void Main(String[] args)
{
    String S = "bbbcccdddaa";
    int []widths = {4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
 
    // Function call to print required answer
    int []ans = numberOfLines(S, widths);
    Console.Write(ans[0]+ " " + ans[1] +"\n");
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
// JAVAscript implementation of the approach
 
// Function to return the number of lines required
function numberOfLines(S,widths)
{
    // If String is empty
    if (S.length==0)
        return [0, 0];
   
    // Initialize lines and width
    let lines = 1, width = 0;
   
    // Iterate through S
    for (let character of S.split(""))
    {
        let w = widths[character.charCodeAt(0) - 'a'.charCodeAt(0)];
        width += w;
   
        if (width >= 10)
        {
            lines++;
            width = w;
        }
    }
   
    // Return lines and width used
    return [lines, width];
}
 
// Driver Code
let S = "bbbcccdddaa";
let widths = [4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
 
// Function call to print required answer
let ans = numberOfLines(S, widths);
document.write(ans[0]+ " " + ans[1] +"<br>");
 
// This code is contributed by rag2127
 
</script>
Producción: 

(2, 8)

 

Publicación traducida automáticamente

Artículo escrito por Sanjit_Prasad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *