Skip to content

Commit

Permalink
problem: new problem solution - 1347 . Minimum Number of Steps to Mak…
Browse files Browse the repository at this point in the history
…e Two Strings Anagram
  • Loading branch information
squxq committed Jan 13, 2024
1 parent bbe628f commit 58f0b07
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ My approach to solving LeetCode problems typically involves the following steps:
| 1026 | [Maximum Difference Between Node and Ancestor](https://leetcode.com/problems/maximum-difference-between-node-and-ancestor/) | Algorithms | [TypeScript](./problems/algorithms/maximumDifferenceBetweenNodeAndAncestor/MaximumDifferenceBetweenNodeAndAncestor.ts) | Medium |
| 1704 | [Determine if String Halves Are Alike](https://leetcode.com/problems/determine-if-string-halves-are-alike/) | Algorithms | [TypeScript](./problems/algorithms/determineIfStringHalvesAreAlike/DetermineIfStringHalvesAreAlike.ts) | Easy |
| 334 | [Increasing Triplet Subsequence](https://leetcode.com/problems/increasing-triplet-subsequence/) | Algorithms | [TypeScript](./problems/algorithms/increasingTripletSubsequence/IncreasingTripletSubsequence.ts) | Medium |
| 1347 | [Minimum Number of Steps to Make Two Strings Anagram](https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/) | Algorithms | [TypeScript](./problems/algorithms/minimumNumberOfStepsToMakeTwoStringsAnagram/MinimumNumberOfStepsToMakeTwoStringsAnagram.ts) | Medium |
| ... | ... | ... | ... | ... |

In this table:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Source : https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/
// Author : francisco
// Date : 2024-01-13

import { minSteps } from "./MinimumNumberOfStepsToMakeTwoStringsAnagram";

describe("minimum number of steps to make two strings anagram", () => {
test("example 1", () => {
const result: number = minSteps("bab", "aba");

expect(result).toBe(1);
});

test("example 2", () => {
const result: number = minSteps("leetcode", "practice");

expect(result).toBe(5);
});

test("example 3", () => {
const result: number = minSteps("anagram", "mangaar");

expect(result).toBe(0);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// Source : https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/
// Author : francisco
// Date : 2024-01-13

/*****************************************************************************************************
*
* You are given two strings of the same length s and t. In one step you can choose any character of t
* and replace it with another character.
*
* Return the minimum number of steps to make t an anagram of s.
*
* An Anagram of a string is a string that contains the same characters with a different (or the same)
* ordering.
*
* Example 1:
*
* Input: s = "bab", t = "aba"
* Output: 1
* Explanation: Replace the first 'a' in t with b, t = "bba" which is anagram of s.
*
* Example 2:
*
* Input: s = "leetcode", t = "practice"
* Output: 5
* Explanation: Replace 'p', 'r', 'a', 'i' and 'c' from t with proper characters to make t anagram of
* s.
*
* Example 3:
*
* Input: s = "anagram", t = "mangaar"
* Output: 0
* Explanation: "anagram" and "mangaar" are anagrams.
*
* Constraints:
*
* 1 <= s.length <= 5 * 10^4
* s.length == t.length
* s and t consist of lowercase English letters only.
******************************************************************************************************/

/**
* @param {string} s
* @param {string} t
* @returns {number}
* return the minimum number of steps to make t an anagram of s
* Tests:
* I: s = "bab", t = "aba" -> O: 1
* I: s = "leetcode", t = "practice" -> O: 5
* I: s = "anagram", t = "mangaar" -> O: 0
* Template:
* iteration char of s, char - place the character and its count in a hastable
* iteration char of t, char - if char in hashtable and count is greater than 0 sub 1 from it
* else add 1 to total count acc
* Time Complexity: O(n), where n is s.length === t.length
* Space Complexity: O(1), since charCounts max length is 26(english alphabet length)
*/
export function minSteps(s: string, t: string): number {
const charCounts = new Map<string, number>();

for (const char of s) charCounts.set(char, (charCounts.get(char) ?? 0) + 1);

let total: number = 0;

for (const char of t) {
if ((charCounts.get(char) as number) > 0)
charCounts.set(char, (charCounts.get(char) as number) - 1);
else total++;
}

return total;
}

0 comments on commit 58f0b07

Please sign in to comment.