← Static tasks

383. Ransom Note

leetcode easy

#csharp#easy#leetcode#string

Task

Даны две строки ransomNote и magazine, верните true, если ransomNote можно составить, используя буквы из magazine, и false в противном случае.

Каждая буква из magazine может быть использована в ransomNote только один раз.

Пример:

Input: ransomNote = "a", magazine = "b"

Output: false

C# solution

matched/original
public bool CanConstruct(string ransomNote, string magazine) {
    foreach (char c in ransomNote) {
        int index = magazine.IndexOf(c);
        if (index == -1) {
            return false;
        }
        magazine = magazine.Remove(index, 1);
    }
    return true;
}

C++ solution

auto-draft, review before submit
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
public bool CanConstruct(string ransomNote, string magazine) {
    foreach (char c in ransomNote) {
        int index = magazine.IndexOf(c);
        if (index == -1) {
            return false;
        }
        magazine = magazine.Remove(index, 1);
    }
    return true;
}

Java solution

matched/original
public boolean canConstruct(String ransomNote, String magazine) {
    for (char c : ransomNote.toCharArray()) {
        int index = magazine.indexOf(c);
        if (index == -1) {
            return false;
        }
        magazine = magazine.substring(0, index) + magazine.substring(index + 1);
    }
    return true;
}

JavaScript solution

matched/original
function canConstruct(ransomNote, magazine) {
  for (let char of ransomNote) {
    let index = magazine.indexOf(char);
    if (index === -1) {
      return false;
    }
    magazine = magazine.slice(0, index) + magazine.slice(index + 1);
  }
  return true;
}

Python solution

matched/original
def canConstruct(ransomNote: str, magazine: str) -> bool:
    for char in ransomNote:
        index = magazine.find(char)
        if index == -1:
            return false
        magazine = magazine[:index] + magazine[index + 1:]
    return True

Go solution

matched/original
package main

import (
  "strings"
)

func canConstruct(ransomNote string, magazine string) bool {
  for _, char := range ransomNote {
    index := strings.IndexRune(magazine, char)
    if index == -1 {
      return false
    }
    magazine = magazine[:index] + magazine[index+1:]
  }
  return true
}

Explanation

Algorithm

Поскольку строки являются неизменяемым типом, их нельзя изменять, поэтому у них нет операций "вставки" и "удаления".

По этой причине необходимо заменять строку magazine новой строкой, в которой отсутствует символ, который мы хотели удалить.

Повторяйте этот процесс, пока не будут удалены все необходимые символы.

😎