Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# practice
# leetcode_javascript_and_python

<h1>目的</h1>
1. 主要用來練習JS,和Python
1. 主要用來練習JavaScript和Python
2. 題目來源:
- LeetCode
- CodeWars
- HackerRank

雖是JavaScript,但實際上使用Node.js,因此不需要打開瀏覽器便可執行JS的環境
CMD打上node {檔案名稱.js},EG.node index.js <br>
而Python,則是打上 python3 {檔案名稱.py} EG.python3 index.py
使用Docker對應Image和腳本來執行
JavaScript 使用node
23 changes: 23 additions & 0 deletions javascript/LeetCode/Array/2442.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* 2442. Count Number of Distinct Integers After Reverse Operations
*
* 計算陣列元素digits反轉後,加上原有陣列會有幾個數字是唯一值
*
* @param {number[]} nums
* @return {number}
*/
var countDistinctIntegers = function(nums) {
// O(N)
nums.push(...nums.map(num =>
parseInt(num.toString().split('').reverse().join(''))
));
return new Set(nums).size;
};
let nums = [1,13,10,12,31];
/*
Output: 6
Explanation: After including the reverse of each number, the resulting array is [1,13,10,12,31,1,31,1,21,13].
The reversed integers that were added to the end of the array are underlined. Note that for the integer 10, after reversing it, it becomes 01 which is just 1.
The number of distinct integers in this array is 6 (The numbers 1, 10, 12, 13, 21, and 31).
*/
console.log(countDistinctIntegers(nums));
47 changes: 47 additions & 0 deletions javascript/LeetCode/String/1653.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/**
* 1653. Minimum Deletions to Make String Balanced
*
* 參數s中只有'a' & 'b'這兩個字母。
* 刪除任一字母使s balanced,若不存在一對index (i,j) 使得 i < j 且 s[i] = 'b' 且 s[j] = 'a',則s 是balanced。
* 回傳至少須刪除幾次(操作幾次)才能使s balanced
*
*
* @param {string} s
* @return {number}
*/
var minimumDeletions = function(s) {
// balanced string中,b不能出現在a之後
// no such 'b' at s[i] where s[j] is 'a' and i < j

// TC:O(N)
// 計算a,b各自出現幾次
let countA = 0,countB = 0;
let minDel = s.length;
// 先計算a出現幾次
for(let i = 0;i < s.length;++i) {
if(s[i] === "a"){
countA++;
}
}
// 之後再次迴圈,若遇到a則--
for(let i = 0; i < s.length;++i) {
if(s[i] === "a"){
countA--;
}
// 不斷更新比較雙方次數
minDel = Math.min(minDel,countA + countB);

// 遇到b,++
if(s[i] === "b"){
countB++;
}
}
return minDel;
};
let s = "aababbab";
/*Output: 2
Explanation: You can either:
Delete the characters at 0-indexed positions 2 and 6 ("aababbab" -> "aaabbb"), or
Delete the characters at 0-indexed positions 3 and 6 ("aababbab" -> "aabbbb").
*/
console.log(minimumDeletions(s));
31 changes: 31 additions & 0 deletions javascript/LeetCode/String/3760.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* 3760. Maximum Substrings With Distinct Start
* Difficulty:Medium
*
* @param {string} s
* @return {number}
*/
var maxDistinct = function(s) {
// 計算字串中,若每個開頭是跟另一substring開頭不同的字母,可以有幾種組合
// 計算每個字母出現次數

// let map = new Map();
// for(let i = 0; i < s.length;++i) {
// map = map.has(s[i]) ? map.set(s[i], map.get(s[i]) + 1) : map.set(s[i], 1);
// }
// return map.size;

// solution 2.
/**
* TC: O(N) =>
* 將s弄成陣列,須loop所有元素,因此O(N)
* new Set(...) 將每個元素插入set,add是O(1)但要做n次,因此O(N)
* size 讀取長度,因此O(1)
*
* new Set([...s]) 需要loop並插入所有元素,所以整體是O(n)
* */
return new Set([...s]).size;
};
let s = "abab";
// 2
console.log(maxDistinct(s))
26 changes: 26 additions & 0 deletions javascript/LeetCode/String/3884.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* 3884. First Matching Character From Both Ends
*
* Return the smallest index i such that s[i] == s[s.length - i - 1].
* 找出最小index,須符合s[i] === s[s.length - i - 1]這條件,若沒有則-1
*
* @param {string} s
* @return {number}
*/
var firstMatchingIndex = function(s) {
// TC: O(N)
// SC: O(1)
let i = 0,j = s.length - 1;
while(i <= j){
if(s[i] === s[j]){
// 左邊index一定是最小的
return i;
}
i++; // 左邊index ++
j--; // 右邊index --
}
return -1;
};
let s = "abcacbd";
// 1
console.log(firstMatchingIndex(s));
95 changes: 66 additions & 29 deletions javascript/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
// debugger
import { format } from 'node:path';
import {ExecutionTimer} from './time.js';
import assert from 'node:assert/strict';
import { count } from 'node:console';
import { lchown } from 'node:fs';

/*
22. Generate Parentheses
Expand Down Expand Up @@ -108,7 +106,7 @@ var findLongestWord = function (s, dictionary) {
* Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.
* Note: You must not use any built-in BigInteger library or convert the inputs to integer directly.
*
* Input num1 and num2 are 非負數以字串方式呈現
* Input num1 and num2 非負數以字串方式呈現
* Output num1 * num2(以字串方式呈現)
* 不能使用內建含式或直接把Input轉成數字
* -------------------------------------------
Expand All @@ -131,21 +129,23 @@ var findLongestWord = function (s, dictionary) {
* @return {string}
*/
var multiply = function (num1, num2) {
/**
* 不能使用內建涵式或轉換型態
*/

let pattern = /^[0-9]+$/;

if (!num1.match(pattern) || !num2.match(pattern) || Number(num1) === 0 || Number(num2) === 0) {
return;
let answer = Array(num1.length + num2.length).fill(0);
console.log(answer)
for(let i = num1.length - 1;i >= 0;i--){

}



};
// const num1 = "2", num2 = "3";
// "6"
// const num1 = "123", num2 = "456";
// "56088"
// console.log(multiply(num1, num2));
const num1 = "123456789",num2 = "987654321";
// "121932631112635269"
// console.log(multiply(num1, num2));ㄋㄋ



Expand Down Expand Up @@ -1258,24 +1258,61 @@ var minRemoval = function(nums, k) {
// console.log(minRemoval(nums,k));


/**
* 1653. Minimum Deletions to Make String Balanced
/***
* 890. Find and Replace Pattern
*
* 參數s中只有'a' & 'b'這兩個字母。
* 刪除任一字母使s balanced,若不存在一對index (i,j) 使得 i < j 且 s[i] = 'b' 且 s[j] = 'a',則s 是balanced。
* 回傳最小須刪除幾次才能使s balanced
*
* @param {string} s
* @return {number}
* @param {string[]} words
* @param {string} pattern
* @return {string[]}
*/
var minimumDeletions = function(s) {

};
// let s = "aababbab";
/*Output: 2
Explanation: You can either:
Delete the characters at 0-indexed positions 2 and 6 ("aababbab" -> "aaabbb"), or
Delete the characters at 0-indexed positions 3 and 6 ("aababbab" -> "aabbbb").
*/
// console.log(minimumDeletions(s));
var findAndReplacePattern = function(words, pattern) {
// solution 1.
// TC: O(n * m)
// let result = [];
// for(let i = 0;i < words.length;i++) {
// if(checkEqual(words[i],pattern)){
// result.push(words[i]);
// }
// }
// return result;

// /**
// * @param {string} a
// * @param {string} b
// * @return {boolean}
// */
// function checkEqual(a,b) {
// for(let i = 0;i < a.length;i++) {
// if(a.indexOf(a[i]) !== b.indexOf(b[i])){
// return false;
// }
// }
// return true;
// }

// solution 2.
// hash map
let result = [];
for(const a of words) {
if(checkEqual(a,pattern)){
result.push(a);
}
// console.log(a)
}

function checkEqual(a,b){
let map = new Map();
for(let i = 0;i < a.length;++i) {
if(!map.has(a[i])){
map.set(i,a[i]);
}
if(map.get(a[i]) ){

}
}

}
};
let word = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb";
// ["mee","aqq"]
// console.log(findAndReplacePattern(word,pattern));
Loading