【算法訓練營Day07】字符串part1

文章目錄

  • 反轉字符串
  • 反轉字符串II
  • 替換數字

反轉字符串

題目鏈接:344. 反轉字符串

雙指針法,兩個指針的元素直接調轉即可

class Solution {public void reverseString(char[] s) {int head = 0;int end = s.length - 1;while(head < end) {char temp  = s[head];s[head++] = s[end];s[end--] = temp;}}
}

反轉字符串II

題目鏈接:541. 反轉字符串 II

雙指針法代碼邏輯:

  • 初始化head、end雙指針,兩指針相距2k,作為操作區間
  • 在操作區間中反轉前k個字符
  • 移動指針,head移到end,end往后移2k,繼續上述操作
  • 直到end指針超出界限
  • 此時將多余部分分情況反轉
    • 少于k全部反轉
    • 大于k,反轉前k個

代碼如下:

class Solution {public String reverseStr(String s, int k) {int head = 0;int end = head + 2 * k;char[] charArray = s.toCharArray();while(end < s.length()) {reverseString(charArray,head,head + k - 1);head = end;end += 2 * k; }int rest = s.length() - head;if(rest >= k) {reverseString(charArray,head,head + k - 1);} else {reverseString(charArray,head,s.length() -1);}return new String(charArray);}public void reverseString(char[] s,int start,int end) {while(start < end) {char temp  = s[start];s[start++] = s[end];s[end--] = temp;}}
}

替換數字

題目鏈接:54. 替換數字

解題邏輯直接遍歷使用StringBuilder拼接即可:

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine(); // 讀取一整行字符串Set<Character> nums = new HashSet<>(Arrays.asList('1','2','3','4','5','6','7','8','9','0'));StringBuilder result = new StringBuilder();for(int i = 0;i < input.length();i++) {if (nums.contains(input.charAt(i)))  result.append("number");else result.append(input.charAt(i));}System.out.println(result);scanner.close();}
}

當然這么寫就繞過了此題的精髓。

這道題想要體現的點在于:很多數組填充類的問題,其做法都是先預先給數組擴容帶填充后的大小,然后在從后向前進行操作。

字符串的本質就是char型數組,所以這個方法當然可以沿用,其好處在于:

  • 避免數據覆蓋:如果從前往后填充,在填充過程中可能會覆蓋尚未處理的數據。而從后向前填充,可以確保在填充新元素時,不會影響到前面尚未處理的元素,從而保證了數據的完整性和正確性。
  • 提高效率:從后向前操作可以減少元素的移動次數。在數組擴容后,若從前往后填充,每插入一個新元素,后面的元素都需要向后移動一位,時間復雜度較高。而從后向前填充,只需將新元素直接放置在合適的位置,無需頻繁移動其他元素,提高了填充操作的效率。

代碼如下:

import java.util.Scanner;public class Main {public static String replaceNumber(String s) {int count = 0; // 統計數字的個數int sOldSize = s.length();for (int i = 0; i < s.length(); i++) {if(Character.isDigit(s.charAt(i))){count++;}}// 擴充字符串s的大小,也就是每個空格替換成"number"之后的大小char[] newS = new char[s.length() + count * 5];int sNewSize = newS.length;// 將舊字符串的內容填入新數組System.arraycopy(s.toCharArray(), 0, newS, 0, sOldSize);// 從后先前將空格替換為"number"for (int i = sNewSize - 1, j = sOldSize - 1; j < i; j--, i--) {if (!Character.isDigit(newS[j])) {newS[i] = newS[j];} else {newS[i] = 'r';newS[i - 1] = 'e';newS[i - 2] = 'b';newS[i - 3] = 'm';newS[i - 4] = 'u';newS[i - 5] = 'n';i -= 5;}}return new String(newS);};public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s = scanner.next();System.out.println(replaceNumber(s));scanner.close();}
}

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

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

相關文章

中國西部逐日1 km全天候地表溫度數據集(TRIMS LST-TP;2000-2024)

時間分辨率&#xff1a;日空間分辨率&#xff1a;100m - 1km共享方式&#xff1a;開放獲取數據大小&#xff1a;474.31 GB數據時間范圍&#xff1a;2000-01-01 — 2024-12-31元數據更新時間&#xff1a;2025-05-31 數據集摘要 青藏高原是全球氣候變化的敏感區域。地表溫度&…

PPT轉圖片拼貼工具 v1.0

軟件介紹 這個軟件的作用就是將單個PPT的每一頁轉換為單獨的圖片&#xff0c;然后將圖片進行拼接起來。 但是我沒有還沒有解決一次性處理多個文件。 效果展示如下&#xff1a; 軟件安裝 軟件源碼 import os import re import win32com.client from PIL import Imagedef con…

嵌入式學習筆記DAY33(網絡編程——TCP)

一、網絡架構 C/S &#xff08;client/server 客戶端/服務器&#xff09;&#xff1a;由客戶端和服務器端兩個部分組成。客戶端通常是用戶使用的應用程序&#xff0c;負責提供用戶界面和交互邏輯 &#xff0c;接收用戶輸入&#xff0c;向服務器發送請求&#xff0c;并展示服務…

拋磚引玉:RadarDet4D,NuScenes數據集Radar模態目標檢測第二名(即將開源)

這幾年一直在關注自動駕駛3D目標檢測相關的研究。在NuScenes數據集上有很多經典的模型被提出并得到了驗證&#xff0c;純視覺3D目標檢測經典的方法有BEVFormer、BEVDet系列、DETR3D、Sparse4D等工作&#xff0c;基于LiDAR的有CenterPoint、多模態有BEVFusion、DAL、UniTR等。 …

更新Java的環境變量后VScode/cursor里面還是之前的環境變量

最近我就遇到這個問題&#xff0c;這個一般是安裝了多個版本的Java&#xff0c;并設置好環境變量&#xff0c;但VScode/cursor內部環境變量卻沒有改變 解決辦法 打開設置&#xff0c;或者直接快捷鍵CTRL&#xff0c;搜索Java:Home編輯settings.json文件 把以下部分改為正確的…

線程的基礎知識

進程和線程的區別&#xff1f; 從實例去引入我們的進程和線程的概念&#xff0c;說出進程和線程的關系&#xff0c;引出線程&#xff0c;說出兩者的內存分配占用&#xff0c;上下文切換的區別 當操作系統把我們磁盤中的程序加載到我們的內存當中&#xff0c;為其分配內存空間&a…

x86 匯編中的【條件跳轉指令】:從基礎到擴展的全面解析(查表版)

為了徹底覆蓋 x86 架構中所有條件跳轉指令&#xff0c;包括 8086 到現代 x86-64 的全部變體&#xff0c;我重新整理了分類體系&#xff0c;并補充了鮮為人知的指令變體、操作數大小前綴和歷史演進。 本文需要運用的知識(需要詳細了解可點擊對應的點)&#xff1a; flags寄存器…

FPGA點亮ILI9488驅動的SPI+RGB接口LCD顯示屏(一)

FPGA點亮ILI9488驅動的SPIRGB接口LCD顯示屏 ILI9488 RGB接口初始化 目錄 前言 一、ILI9488簡介 二、3線SPI接口簡介 三、配置寄存器介紹 四、手冊和初始化verilog FPGA代碼 總結 前言 ILI9488是一款廣泛應用于嵌入式系統和電子設備的彩色TFT LCD顯示控制器芯片。本文將介…

Git忽略規則.gitignore不生效解決

我在gitlab中新建了一個項目倉庫&#xff0c;先把項目文件目錄綁定到倉庫&#xff0c;并全部文件都上傳到了倉庫中。 然后又從別的項目復制了忽略文件配置過來&#xff0c;怎么搞他都不能生效忽略我不要提交倉庫的文件。 從網上查到說在本地倉庫目錄中&#xff0c;打開命…

記一個判決書查詢API接口的開發文檔

一、引言 在企業風控、背景調查、盡職調查等場景中&#xff0c;判決書查詢是一個非常重要的環節。通過判決書查詢&#xff0c;可以了解個人或企業的司法涉訴情況&#xff0c;為風險評估提供數據支持。本文將詳細介紹如何開發和使用一個司法涉訴查詢API接口&#xff0c;包括客戶…

mac版excel如何制作時長版環形圖

設置輔助列 創建簇狀柱形圖 將輔助列繪制在次坐標軸 工作時長在主坐標軸&#xff0c;右鍵分別更改圖表類型為圓環。 輔助列圓環全部為灰色&#xff0c;邊框為白色 輔助列設置透明度100% 設置輔助列和工作時長列同樣的圓環大小 可得 核心&#xff1a;只要輔助列邊框不透明…

貪心算法應用:埃及分數問題詳解

貪心算法與埃及分數問題詳解 埃及分數&#xff08;Egyptian Fractions&#xff09;問題是數論中的經典問題&#xff0c;要求將一個真分數表示為互不相同的單位分數之和。本文將用2萬字全面解析貪心算法在埃及分數問題中的應用&#xff0c;涵蓋數學原理、算法設計、Java實現、優…

量化面試綠皮書:1. 海盜分金博弈

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 1. 海盜分金博弈 五個海盜搶走了一個裝滿 100 枚金幣的箱子。作為一群民主的海盜&#xff0c;他們同意以下分配戰利品的方法:最資深的海盜將…

購物商城網站 Java+Vue.js+SpringBoot,包括商家管理、商品分類管理、商品管理、在線客服管理、購物訂單模塊

購物商城網站 JavaVue.jsSpringBoot&#xff0c;包括商家管理、商品分類管理、商品管理、在線客服管理、購物訂單模塊 百度云盤鏈接&#xff1a;https://pan.baidu.com/s/10W0kpwswDSmtbqYFsQmm5w 密碼&#xff1a;68jy 摘 要 隨著科學技術的飛速發展&#xff0c;各行各業都在…

用mediamtx搭建簡易rtmp,rtsp視頻服務器

簡述&#xff1a; 平常測試的時候搭建rtmp服務器很麻煩&#xff0c;這個mediamtx服務器&#xff0c;只要下載就能運行&#xff0c;不用安裝、編譯、配置等&#xff0c;簡單易用、ffmpeg推流、vlc拉流 基礎環境&#xff1a; vmware17&#xff0c;centos10 64位&#xff0c;wi…

Java 高頻面試題場景(二):老年健康手環數據管理系統

系列文章 序號文章名稱1Java 高頻面試題場景(一):社區智能充電樁管理系統2Java 高頻面試題場景(二):老年健康手環數據管理系統文章目錄 系列文章一、項目信息項目介紹技術棧主要工作二、面試題及回答1. **面試官問**:在這個老年健康手環數據管理系統項目中,為什么要用R…

Python爬蟲爬取天貓商品數據,詳細教程【Python經典實戰項目】

Python爬取天貓商品數據詳細教程 一、前期準備 1. 環境配置 Python環境&#xff1a;確保已安裝Python 3.x版本&#xff0c;建議使用Anaconda或直接從Python官網下載安裝。第三方庫&#xff1a; requests&#xff1a;用于發送HTTP請求。BeautifulSoup&#xff1a;用于解析HTM…

Symbol as Points: Panoptic Symbol Spotting via Point-based Representation

文章目錄 AbstractIntroductionRelated WorkVector Graphics RecognitionPanoptic Symbol SpottingPoint Cloud Segmentation MethodFrom Symbol to PointsPrimitive positionPrimitive feature Panoptic Symbol Spotting via Point-based RepresentationBackboneSymbol Spotti…

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()獲取任意值的類型對象1.2、reflect.ValueOf()1.3、結構體反射 2、文件操作2.1、os.Open()打開文件2.2、方式一&#xff1a;使用Read()讀取文件2.3、方式二&#xff1a;bufio讀取文件2.4、方式三&#xff1a;os.ReadFile讀取2.5、寫…

[閉源saas選項]Pinecone:為向量數據庫而生的實時語義搜索引擎

目錄 Pinecone&#xff1a;為向量數據庫而生的實時語義搜索引擎 一、什么是 Pinecone&#xff1f; 二、Pinecone 是開源的嗎&#xff1f;支持私有化部署嗎&#xff1f; 三、為什么需要向量搜索&#xff1f; 四、Pinecone 的核心優勢 五、使用 Pinecone 的典型流程 六、在…