SouthLeetCode-打卡24年02月第3周

SouthLeetCode-打卡24年02月第3周

// Date : 2024/02/12 ~ 202X/02/18

049.反轉字符串

(1) 題目描述

049#LeetCode.344.簡單題目鏈接#Monday2024/02/12

編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 s 的形式給出。

不要給另外的數組分配額外的空間,你必須**原地修改輸入數組**、使用 O(1) 的額外空間解決這一問題。

(2) 題解代碼

class Solution {void swap(char[] s, int i, int j){char temp = s[i];s[i] = s[j];s[j] = temp;} public void reverseString(char[] s) {int len = s.length;int left = 0; int right = len - 1;while(left <= right){swap(s, left, right);left++; right--;}}
}

050.反轉字符串 II

(1) 題目描述

050#LeetCode.541.簡單題目鏈接#Monday2024/02/12

給定一個字符串 s 和一個整數 k,從字符串開頭算起,每計數至 2k 個字符,就反轉這 2k 字符中的前 k 個字符。

  • 如果剩余字符少于 k 個,則將剩余字符全部反轉。
  • 如果剩余字符小于 2k 但大于或等于 k 個,則反轉前 k 個字符,其余字符保持原樣。

(2) 題解代碼

class Solution {class Box{char[] s;int len;Box(String str){this.len = str.length();this.s = new char[this.len];for(int i=0 ; i<len ; i++){s[i] = str.charAt(i);}}void swap(int i, int j){char temp = s[i];s[i] = s[j];s[j] = temp;}void reveStr(int start, int end) {int len = end - start;int left = start; int right = end;while(left <= right){swap(left, right);left++; right--;}}void reverseStrInBox(int k) {int cur = 0;int stk = cur + 2*k - 1;int remd = 0;while(stk <= len){reveStr(cur,cur+k-1);cur = stk+1;stk = cur + 2*k - 1;}remd = len - cur;System.out.println(cur);if(remd < k){reveStr(cur,len-1);}else if(remd < 2*k){reveStr(cur,cur+k-1);}}}public String reverseStr(String s, int k) {Box box = new Box(s);box.reverseStrInBox(k);return new String(box.s);}
}

051.替換數字

(1) 題目描述

051#KamaCoder.54.簡單題目鏈接#Tuesday2024/02/13

給定一個字符串 s,它包含小寫字母和數字字符,請編寫一個函數,

將字符串中的字母字符保持不變,而將每個數字字符替換為number。

例如,對于輸入字符串 “a1b2c3”,函數應該將其轉換為 “anumberbnumbercnumber”。

輸入描述:輸入一個字符串 s,s 僅包含小寫字母和數字字符。

輸出描述:打印一個新的字符串,其中每個數字字符都被替換為了number

(2) 題解代碼

/* 給定一個字符串 s,它包含小寫字母和數字字符,請編寫一個函數,* 將字符串中的字母字符保持不變,而將每個數字字符替換為number。* 例如,對于輸入字符串 "a1b2c3",函數應該將其轉換為 "anumberbnumbercnumber"。*/
// 輸入描述:輸入一個字符串 s,s 僅包含小寫字母和數字字符。
// 輸出描述:打印一個新的字符串,其中每個數字字符都被替換為了number
import java.util.*;public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);String s = sc.nextLine();List<Character> list = new ArrayList<>();int len = s.length();Character[] numArray = {'n','u','m','b','e','r'};List<Character> numList = Arrays.asList(numArray);for(int i=0 ; i<len ; i++){char ch = s.charAt(i);if('a' <= ch && ch <= 'z'){list.add(ch);}else{list.addAll(numList);}}StringBuilder stringBuilder = new StringBuilder();for (Character ch : list) {stringBuilder.append(ch);}String result = stringBuilder.toString();System.out.println(result);} }

052.右旋字符串

(1) 題目描述

052#LeetCode.55.簡單題目鏈接#Tuesday2024/02/13

字符串的右旋轉操作是把字符串尾部的若干個字符轉移到字符串的前面。

給定一個字符串 s 和一個正整數 k,請編寫一個函數,將字符串中的后面 k 個字符移到字符串的前面,實現字符串的右旋轉操作。

例如,對于輸入字符串 “abcdefg” 和整數 2,函數應該將其轉換為 “fgabcde”。

輸入描述:輸入共包含兩行,第一行為一個正整數 k,代表右旋轉的位數。第二行為字符串 s,代表需要旋轉的字符串。

輸出描述:輸出共一行,為進行了右旋轉操作后的字符串。

(2) 題解代碼

Version1.0

import java.util.*;public class Main {static char[] strToArray(String str){int len = str.length();char[] chars = new char[len];for(int i=0 ; i<len ; i++){chars[i] = str.charAt(i);}return chars;}public static void main(String[] args){Scanner scanner = new Scanner(System.in);int k = scanner.nextInt();scanner.nextLine();String s = scanner.nextLine();int len = s.length();char[] chars = strToArray(s);char[] helper = new char[k];for(int i=0 ; i<k ; i++){helper[i] = chars[len-k+i];}for(int i=len-k-1 ; i>=0 ; i--){chars[i+k] = chars[i];}for(int i=0 ; i<k ; i++){chars[i] = helper[i];}String res = new String(chars);System.out.println(res);}
}

Version2.0

import java.util.*;public class Main {static char[] strToArray(String str){int len = str.length();char[] chars = new char[len];for(int i=0 ; i<len ; i++){chars[i] = str.charAt(i);}return chars;}public static void main(String[] args){Scanner scanner = new Scanner(System.in);int k = scanner.nextInt();scanner.nextLine();String s = scanner.nextLine();int len = s.length();StringBuilder sbk = new StringBuilder(s);StringBuilder sbo = new StringBuilder(s);sbk.delete(0, len-k);sbo.delete(len-k, len);sbk.append(sbo);String str = sbk.toString();System.out.println(str);}
}

053.反轉字符串中的單詞

(1) 題目描述

003#LeetCode.151.簡單題目鏈接#Wednesday2024/02/0X

給你一個字符串 s ,請你反轉字符串中 單詞 的順序。

單詞 是由非空格字符組成的字符串。s 中使用至少一個空格將字符串中的 單詞 分隔開。

返回 單詞 順序顛倒且 單詞 之間用單個空格連接的結果字符串。

**注意:**輸入字符串 s中可能會存在前導空格、尾隨空格或者單詞間的多個空格。返回的結果字符串中,單詞間應當僅用單個空格分隔,且不包含任何額外的空格。

(2) 題解代碼

class Solution {public String reverseWords(String s) {int left = 0;int right = s.length() - 1;while (left <= right && s.charAt(left) == ' ') {++left;}while (left <= right && s.charAt(right) == ' ') {--right;}Deque<String> d = new ArrayDeque<String>();StringBuilder word = new StringBuilder();while (left <= right) {char c = s.charAt(left);if ((word.length() != 0) && (c == ' ')) {d.offerFirst(word.toString());word.setLength(0);} else if (c != ' ') {word.append(c);}++left;}d.offerFirst(word.toString());return String.join(" ", d);}
}

054.找出字符串中第一個匹配項的下標

(1) 題目描述

004#LeetCode.28.簡單題目鏈接#Thursday2024/02/15

(2) 題解代碼

class Solution {class Box{String str;int len;int idx;Box(String str){this.str = str;this.len = str.length();this.idx = 0;}boolean idxSafe(){return idx >= 0 && idx < len;}char getChar(){return str.charAt(idx);}void loopCnt(){this.idx++;}}public int strStr(String haystack, String needle) {Box hBox = new Box(haystack);Box nBox = new Box(needle);if(hBox.len < nBox.len){return -1;}int bigIdx = 0;while(hBox.idxSafe() && nBox.idxSafe()){while(hBox.idxSafe() && nBox.idxSafe() && hBox.getChar() == nBox.getChar()){if(nBox.idx == nBox.len-1){return hBox.idx - nBox.len + 1;}System.out.println("h : " + hBox.getChar() +", n : " + nBox.getChar());hBox.loopCnt();nBox.loopCnt();}nBox.idx = 0;hBox.idx = ++bigIdx;// nBox.loopCnt();}return -1;}
}

055.重復的子字符串

(1) 題目描述

004#LeetCode.459.簡單題目鏈接#Thursday2024/02/15

(2) 題解代碼

class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;int len = s.length();s = " " + s;char[] chars = s.toCharArray();int[] next = new int[len + 1];for (int i = 2, j = 0; i <= len; i++) {while (j > 0 && chars[i] != chars[j + 1]) j = next[j];if (chars[i] == chars[j + 1]) j++;next[i] = j;}if (next[len] > 0 && len % (len - next[len]) == 0) {return true;}return false;}
}

056.棧的自我實現

(1) 題目描述

005#LeetCode.XXX.簡單題目鏈接#Friday2024/02/16

(2) 題解代碼

// 略

057.隊列的自我實現

(1) 題目描述

005#Self-Proposition.簡單題目鏈接#Friday2024/02/16

(2) 題解代碼

// 略

058.用棧實現隊列

(1) 題目描述

006#LeetCode.232.簡單題目鏈接#Saturday2024/02/17

請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作(pushpoppeekempty):

實現 MyQueue 類:

  • void push(int x) 將元素 x 推到隊列的末尾
  • int pop() 從隊列的開頭移除并返回元素
  • int peek() 返回隊列開頭的元素
  • boolean empty() 如果隊列為空,返回 true ;否則,返回 false

(2) 題解代碼

class MyQueue {Stack<Integer> stack1;Stack<Integer> stack2;public MyQueue() {stack1 = new Stack<>();stack2 = new Stack<>();}public void push(int x) {stack2.push(x);}public int pop() {if(!stack1.isEmpty()){return stack1.pop();}else{int res = 0;int len2 = stack2.size();for(int i=0 ; i<len2 ; i++){res = stack2.pop();stack1.push(res);}stack1.pop();return res;}}public int peek() {if(!stack1.isEmpty()){return stack1.peek();}else{int res = 0;int len2 = stack2.size();for(int i=0 ; i<len2 ; i++){res = stack2.pop();stack1.push(res);}return res;}}public boolean empty() {return stack1.isEmpty() && stack2.isEmpty();}
}

059.用隊列實現棧

(1) 題目描述

006#LeetCode.225.簡單題目鏈接#Saturday2024/02/0X

請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(pushtoppopempty)。

實現 MyStack 類:

  • void push(int x) 將元素 x 壓入棧頂。
  • int pop() 移除并返回棧頂元素。
  • int top() 返回棧頂元素。
  • boolean empty() 如果棧是空的,返回 true ;否則,返回 false

(2) 題解代碼

class MyStack {Queue<Integer> queue1;Queue<Integer> queue2;public MyStack() {queue1 = new LinkedList<>();queue2 = new LinkedList<>();}public void push(int x) {queue2.offer(x);}public int pop() {if(queue2.isEmpty()){return popHelper(queue2,queue1);}else{return popHelper(queue1,queue2);}}public int popHelper(Queue<Integer> queue1, Queue<Integer> queue2) {int res = 0;int len2 = queue2.size();for(int i=0 ; i<len2-1 ; i++){res = queue2.poll();queue1.offer(res);}return queue2.poll();}public int top() {int res = pop();push(res);return res;}public boolean empty() {return queue1.isEmpty() && queue2.isEmpty();}
}

060.有效的括號

(1) 題目描述

007#LeetCode.20.簡單題目鏈接#Sunday2024/02/0X

(2) 題解代碼

class Solution {class MapBox{Map<Character,Character> map;MapBox(){map = new HashMap<>();map.put('(',')'); map.put('{','}'); map.put('[',']');}boolean areMatch(char key, char val){return map.get(key) != null && map.get(key) == val;}}public boolean isValid(String s) {MapBox mox = new MapBox();int len = s.length();Stack<Character> stack = new Stack<>();for(int i=0 ; i<len ; i++){char cur = s.charAt(i);if(stack.isEmpty()){stack.push(cur);}else{char pre = stack.pop();if(!mox.areMatch(pre,cur)){stack.push(pre);stack.push(cur);}}}return stack.isEmpty();}
}

061.刪除字符串中的所有相鄰重復項

(1) 題目描述

007#LeetCode.046.簡單題目鏈接#Sunday2024/02/0X

(2) 題解代碼

class Solution {public String removeDuplicates(String s) {int len = s.length();Stack<Character> stack = new Stack();for(int i=0 ; i<len ; i++){char curr = s.charAt(i);if(stack.isEmpty()){stack.push(curr);}else{char prev = stack.pop();if(prev != curr){stack.push(prev);stack.push(curr);}}}StringBuilder build = new StringBuilder();while(!stack.isEmpty()){build.insert(0, stack.pop());}return build.toString();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696418.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696418.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696418.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C語言】注釋

&#x1f388;個人主頁&#xff1a;豌豆射手^ &#x1f389;歡迎 &#x1f44d;點贊?評論?收藏 &#x1f917;收錄專欄&#xff1a;C語言 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共同學習、交流進步&…

計算機網絡--物理層練習題

習題 下列說法正確的是&#xff08;D&#xff09; A 信道與通信電路類似&#xff0c;一條可通信的電路往往包含一個信道 信道不等于通信電路&#xff0c;一條可雙向通信的電路往往包含兩個信道&#xff1a;一個是發送信道&#xff0c;一條是接收信道。另外&#xff0c;多個通…

【國際化】用JQuery-i18next的國際化demo,引入json

參考&#xff1a; 使用 i18next 的 jQuery 國際化 &#xff08;i18n&#xff09; 漸進式指南 (locize.com) i18next-http-backend/example/jquery/index.html at master i18next/i18next-http-backend (github.com) 文檔 可能需要解決一下跨域問題&#xff0c;因為瀏覽器讀取本…

Unity學習之Unity中的MVC思想

文章目錄 1 前言2 MVC的基本概念3 不使用MVC思想制作UI邏輯3.1 拼面板3.2 面板腳本3.3 角色面板邏輯3.4 角色升級 4 使用MVC思想制作UI邏輯4.1 Model數據腳本4.2 View界面腳本4.2.1 MainView主界面4.2.2 RoleView 角色面板界面 4.3 Controller業務邏輯腳本4.3.1 MainController…

【開源軟件????】

開源軟件的影響力在當今的科技領域越來越顯著&#xff0c;它已經成為軟件開發的主流趨勢之一。開源軟件具有開放源代碼、可免費使用、可自由分發等特點&#xff0c;這使得它在全球范圍內得到了廣泛的應用和支持。本文將圍繞開源軟件如何推動技術創新、開源軟件的商業模式、開源…

phaseDNN文章解讀

文章DOI: https://doi.org/10.48550/arXiv.1905.01389 作者是 Southern Methodist University 的Wei Cai 教授 A Parallel Phase Shift Deep Neural Network for Adaptive Wideband Learning 一種并行移相深度神經網絡來自適應學習寬帶頻率信號 20190514 核心思想&#xff1a;…

跟著pink老師前端入門教程(JavaScript)-day05

六、語句 &#xff08;一&#xff09;表達式和語句 1、表達式 表達式是可以被求值的代碼&#xff0c;JavaScript 引擎會將其計算出一個結果。 2、語句 語句是一段可以執行的代碼。 比如&#xff1a; prompt() 可以彈出一個輸入框&#xff0c;還有 if語句 for 循環語句等…

h5 js監聽手機切到后臺和切回

在H5中可以使用JavaScript來監聽手機從前臺切換到后臺或者從后臺切換回前臺的事件。 監聽頁面進入/退出后臺&#xff08;切換到其他應用&#xff09;&#xff1a; document.addEventListener(visibilitychange, function() {if (document.hidden) { // 當頁面被切換至后臺時c…

C# 類型的默認值(C# 參考)

C# 類型的默認值 - C# 參考 - C# | Microsoft Learn EntityFrameworkQueryableExtensions.FirstOrDefaultAsync 方法 (Microsoft.EntityFrameworkCore) | Microsoft Learn 當使用EFCore的FirstOrDefaultAsync方法時&#xff0c;需清楚當查詢不到數據返回null還是什么&#xf…

jQuery淺析

jQuery 是一個快速、簡潔的 JavaScript 庫&#xff0c;旨在簡化 HTML 文檔遍歷、事件處理、動畫以及 Ajax 交互等功能。由 John Resig 在2006年創建&#xff0c;它極大地簡化了JavaScript開發人員在處理網頁文檔、選擇DOM元素以及執行各種效果和功能時的工作。 核心特性&#x…

Socks5代理IP詳解:優勢與應用場景

Socks5代理IP作為網絡代理技術的前沿選擇&#xff0c;其在多方面的優勢使其在2024年成為了熱門選擇。 一、Socks5代理IP的核心特性 1、Socks5代理IP與其他代理類型的比較 HTTP代理設計用于web瀏覽&#xff0c;僅支持HTTP和HTTPS協議。 Socks4代理支持更多類型的網絡協議&…

rust實戰系列十二:浮點類型

Rust提供了基于IEEE 754-2008標準的浮點類型。按占據空間大小區分&#xff0c;分別為 f32和f64&#xff0c;其使用方法與整型差別不大。浮點數字面量表示方式有如下幾種: 輸出結果為: let f1 123.0f64; let f2 0.1f64; let f3 0.1f32; let f4 12E99_f64; let f5 : f64 2.…

歐拉回路和歐拉路徑

在一張圖中&#xff0c;從一個點出發每條邊經過且只經過一次得到的路徑&#xff0c;如果最后回到起點&#xff0c;那么就是歐拉回路&#xff0c;如果最后沒有回到起點&#xff0c;那么得到的就是歐拉路徑。 在無向圖中&#xff0c;歐拉路徑滿足的要求是&#xff0c;除了起點和…

DM數據庫學習之路(十六)DEM部署DM8DPC集群

DEM部署DPC集群 DPC準備工作 在所有安裝DPC服務器上部署dmagent&#xff0c;dmagent的運行環境需要依賴JAVA環境&#xff0c;JAVA版本必須為JAVA1.8。 創建用戶 所有安裝DPC服務器&#xff0c;手工建dmdba用戶 # groupadd dinstall # useradd -g dinstall -d /home/dmdba…

并發編程之深入理解Java線程

并發編程之深入理解Java線程 線程基礎知識 線程和進程 進程 程序由指令和數據組成、但這些指令要運行&#xff0c;數據要讀寫&#xff0c;就必須要將指令加載至CPU、數據加載至內存。在指令運行過程中還需要用到磁盤、網絡等設備。進程就是用來加載指令、管理內存、管理IO的…

Jmeter內置變量 vars 和props的使用詳解

JMeter是一個功能強大的負載測試工具&#xff0c;它提供了許多有用的內置變量來支持測試過程。其中最常用的變量是 vars 和 props。 vars 變量 vars 變量是線程本地變量&#xff0c;它們只能在同一線程組內的所有線程中使用&#xff08;線程組內不同線程之間變量不共享&#…

模型轉換案例學習:等效替換不支持算子

文章介紹 Qualcomm Neural Processing SDK &#xff08;以下簡稱SNPE&#xff09;支持Caffe、ONNX、PyTorch和TensorFlow等不同ML框架的算子。對于某些特定的不支持的算子&#xff0c;我們介紹一種算子等效替換的方法來完成模型轉換。本案例來源于https://github.com/quic/qidk…

并發編程(2)基礎篇-管程

4 共享模型之管程 本章內容 共享問題synchronized線程安全分析Monitorwait/notify線程狀態轉換活躍性Lock 4.1 共享帶來的問題 4.1.1 小故事 老王&#xff08;操作系統&#xff09;有一個功能強大的算盤&#xff08;CPU&#xff09;&#xff0c;現在想把它租出去&#xff…

基礎小白快速入門Python->Python中的類

什么是類&#xff1f; 在編程語言中&#xff0c;類&#xff08;Class&#xff09;是一個用于創建對象的藍圖或模板。它定義了對象的屬性&#xff08;也稱為成員變量&#xff09;和方法&#xff08;也稱為成員函數&#xff09;。類是面向對象編程&#xff08;OOP&#xff09;的…

2024 全國水科技大會暨第二屆智慧水環境管理與技術創新論壇

論壇二&#xff1a;第二屆智慧水環境管理與技術創新論壇 召集人&#xff1a;劉炳義 武漢大學智慧水業研究所所長、教授 為貫徹落實中共中央國務院印發《數字中國建設整體布局規劃》和國務院關于印發《“十四五”數字經濟發展規劃》的通知&#xff0c;推動生態環境智慧治理&…