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.mzph.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;推动生态环境智慧治理&…