【C++修行之道】string類練習題

目錄

387. 字符串中的第一個唯一字符

125. 驗證回文串?

917. 僅僅反轉字母

415. 字符串相加(重點)

541. 反轉字符串 II


387. 字符串中的第一個唯一字符

字符串中的第一個唯一字符 - 力扣(LeetCode)

給定一個字符串?s?,找到它的第一個不重復的字符,并返回它的索引?。

如果不存在,則返回?-1?。

示例 1:

輸入: s = "leetcode"
輸出: 0

示例 2:

輸入: s = "loveleetcode"
輸出: 2

示例 3:

輸入: s = "aabb"
輸出: -1

提示:

  • 1 <= s.length <= 105
  • s?只包含小寫字母

class Solution {
public:int firstUniqChar(string s) {int count[26] = {0};// 統計次數for(auto ch:s){count[ch-'a']++;}for(size_t i =0; i< s.size(); ++i){if(count[s[i] - 'a'] == 1){return i;}}return -1;}
};

?

  • ch - 'a' 計算字符 ch 相對于字符 'a' 的位置索引。例如,字符 'a' 的位置為 0,字符 'b' 的位置為 1,依此類推。
  • count[ch - 'a']++ 表示將 count 數組中相應位置的值加 1,從而記錄字符 ch 出現的次數。
  • count[s[i] - 'a'] == 1 檢查字符 s[i] 是否在字符串 s 中只出現了一次。如果是,則返回該字符的索引 i

125. 驗證回文串?

驗證回文串? - 力扣(LeetCode)

如果在將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符之后,短語正著讀和反著讀都一樣。則可以認為該短語是一個 回文串 。

字母和數字都屬于字母數字字符。

給你一個字符串 s,如果它是 回文串 ,返回 true ;否則,返回 false 。

示例 1:

輸入: s = "A man, a plan, a canal: Panama"
輸出:true
解釋:"amanaplanacanalpanama" 是回文串。

示例 2:

輸入:s = "race a car"
輸出:false
解釋:"raceacar" 不是回文串。

示例 3:

輸入:s = " "
輸出:true
解釋:在移除非字母數字字符之后,s 是一個空字符串 "" 。
由于空字符串正著反著讀都一樣,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 105
  • s?僅由可打印的 ASCII 字符組成
class Solution {
public:// 判斷字符是數字還是字母bool isLetterOrNumber(char ch){return (ch >= '0' && ch <= '9')|| (ch >= 'a' && ch <= 'z')|| (ch >= 'A' && ch <= 'Z');}//判斷字符串是否是回文串bool isPalindrome(string s) {// 先小寫字母轉換成大寫,再進行判斷for (auto& ch : s){if (ch >= 'a' && ch <= 'z')ch -= 32;}int begin = 0, end = s.size() - 1;while (begin < end){while (begin < end && !isLetterOrNumber(s[begin]))++begin;while (begin < end && !isLetterOrNumber(s[end]))--end;if (s[begin] != s[end]){return false;}else{++begin;--end;}}return true;}
};

?

  • while (begin < end) 循環確保指針交替向中間移動,直到它們相遇或交錯。
  • while (begin < end && !isLetterOrNumber(s[begin])) ++begin; 跳過非字母數字字符,移動 begin 指針向右。
  • while (begin < end && !isLetterOrNumber(s[end])) --end; 跳過非字母數字字符,移動 end 指針向左。
  • 如果 s[begin] != s[end],即對應字符不相等,返回 false,表示字符串不是回文串。
  • 如果對應字符相等,繼續移動指針 begin 向右,end 向左。

917. 僅僅反轉字母

僅僅反轉字母 - 力扣(LeetCode)

給你一個字符串 s ,根據下述規則反轉字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小寫或大寫)位置反轉。

返回反轉后的 s 。

示例 1:

輸入:s = "ab-cd"
輸出:"dc-ba"

示例 2:

輸入:s = "a-bC-dEf-ghIj"
輸出:"j-Ih-gfE-dCba"

示例 3:

輸入:s = "Test1ng-Leet=code-Q!"
輸出:"Qedo1ct-eeLg=ntse-T!"

提示:

  • 1 <= s.length <= 100
  • s 僅由 ASCII 值在范圍 [33, 122] 的字符組成
  • s 不含 '\"' 或 '\\'

class Solution {
public:// 判斷字符是否是字母bool isLetter(char ch){if (ch >= 'a' && ch <= 'z')return true;if (ch >= 'A' && ch <= 'Z')return true;return false;}// 反轉字符串中的字母string reverseOnlyLetters(string S) {if (S.empty())return S;size_t begin = 0, end = S.size() - 1;while (begin < end){while (begin < end && !isLetter(S[begin]))++begin;while (begin < end && !isLetter(S[end]))--end;swap(S[begin], S[end]);++begin;--end;}return S;}
};
  • reverseOnlyLetters 函數接收一個字符串 S,并返回一個僅反轉字母部分的字符串。
  • 首先檢查字符串是否為空,如果是,則直接返回原字符串。
  • 使用 while (begin < end) 循環確保指針交替向中間移動,直到它們相遇或交錯。
  • while (begin < end && !isLetter(S[begin])) ++begin; 跳過非字母字符,移動 begin 指針向右。
  • while (begin < end && !isLetter(S[end])) --end; 跳過非字母字符,移動 end 指針向左。
  • swap(S[begin], S[end]); 交換 beginend 指針指向的字母。
  • 繼續移動指針 begin 向右,end 向左。
  • beginend 指針相遇或交錯時,返回反轉后的字符串 S

415. 字符串相加(重點)

字符串相加 - 力扣(LeetCode)

給定兩個字符串形式的非負整數?num1 和num2?,計算它們的和并同樣以字符串形式返回。

你不能使用任何內建的用于處理大整數的庫(比如 BigInteger),?也不能直接將輸入的字符串轉換為整數形式。

示例 1:

輸入:num1 = "11", num2 = "123"
輸出:"134"

示例 2:

輸入:num1 = "456", num2 = "77"
輸出:"533"

示例 3:

輸入:num1 = "0", num2 = "0"
輸出:"0"

提示:

  • 1 <= num1.length, num2.length <= 104
  • num1?和num2?都只包含數字?0-9
  • num1?和num2?都不包含任何前導零
class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1;int end2 = num2.size() - 1;string str;int next = 0;// 進位while(end1 >= 0 || end2 >= 0){int x1 = end1 >= 0 ? num1[end1--] - '0' : 0;int x2 = end2 >= 0 ? num2[end2--] - '0' : 0;int x = x1 + x2 + next;// 處理進位next = x / 10;x = x % 10;// 頭插// str.insert(0, 1, '0'+x);str.insert(str.begin(), '0'+x);}// 還有一個進位沒處理if(next == 1){str.insert(str.begin(), '1');}  return str;}
};

?

  • while (end1 >= 0 || end2 >= 0) 循環確保我們遍歷兩個字符串,直到兩個字符串都處理完畢。
  • x1x2 分別是當前字符對應的數字,如果對應的字符已經處理完畢,則賦值為 0
  • x 是當前位相加的結果,包括進位 next
  • next = x / 10 計算新的進位值。
  • x = x % 10 計算當前位的實際數字。
  • str.insert(str.begin(), '0' + x) 將當前位的結果插入到結果字符串的頭部。
  • end1--end2-- 將指針分別向前移動一位。
  • 如果循環結束后還有進位,則在結果字符串的頭部插入 '1'
class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1;int end2 = num2.size() - 1;string str;int next = 0;// 進位while(end1 >= 0 || end2 >= 0){int x1 = end1 >= 0 ? num1[end1--] - '0' : 0;int x2 = end2 >= 0 ? num2[end2--] - '0' : 0;int x = x1 + x2 + next;// 處理進位next = x / 10;x = x % 10;// 尾插str += ('0' + x);}// 還有一個進位沒處理if(next == 1){str += '1';}  reverse(str.begin(), str.end());return str;}

541. 反轉字符串 II

541. 反轉字符串 II

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

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

示例 1:

輸入:s = "abcdefg", k = 2
輸出:"bacdfeg"

示例 2:

輸入:s = "abcd", k = 2
輸出:"bacd"

提示:

1 <= s.length <= 10000
s 僅由小寫英文組成
1 <= k <= 10000

class Solution {
public:string reverseStr(string s, int k) {int n = s.length();for(int i = 0; i < n; i += 2 * k)reverse(s.begin() + i, s.begin() + min(i + k, n));return s;}
};

今天就先到這了!!!

看到這里了還不給博主扣個:
?? 點贊??收藏 ?? 關注!

你們的點贊就是博主更新最大的動力!
有問題可以評論或者私信呢秒回哦。

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

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

相關文章

中霖教育怎么樣?稅務專業可以考哪些證書?

在稅務專業領域&#xff0c;專業技能的認證對職業發展至關重要。以下為稅務專業相關可以考的證書&#xff1a; 1. 注冊稅務師資格證書&#xff1a;該證書是稅務專業人士的關鍵資質&#xff0c;使持證者可以從事稅務相關工作。 2. 會計職稱證書&#xff1a;會計系列證書分為初…

Linux 安裝 docker-compose

安裝 docker安裝 安裝docker-compose github安裝 版本查詢 地址: github地址 選擇自己想要安裝的版本 修改以下語句版本號 curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compo…

筆記本系統

筆記本更新升級 筆記本購入太早&#xff0c;所用內存只有4G&#xff0c;通過更好內存條升級系統性能 查看電腦支持內存大小 cmd命令輸入wmic memphysical get maxcapacity 這串數字就是電腦最大支持內存數值&#xff0c;做除法除兩次1024&#xff01;&#xff0c;得出來的…

查看oracle ojdbc所支持的JDBC驅動版本

oracle jcbc驅動的下載地址參考&#xff1a;JDBC and UCP Downloads page 其實上文中對ojdbc所支持的JDBC驅動版本已經有說明了&#xff0c;不過&#xff0c;因為oracle的驅動包很多時間&#xff0c;都是在公司內部私服里上傳維護的&#xff0c;上傳的時候&#xff0c;可能又沒…

flutter 實現AppStore左右滑動

在AppStore中如何實現左右滑動&#xff0c;因為使用PageView會居中顯示&#xff0c;不會居左顯示&#xff0c;目前沒有找到解決方案&#xff0c;我使用的方案是ListView自定義physics實現的。 代碼 SizedBox(width: 200,height: 400,child: ListView.builder(scrollDirection:…

Java中實現二維數組(矩陣)的轉置

在矩陣運算中&#xff0c;矩陣的轉置是一個基本操作&#xff0c;即將矩陣的行變成列&#xff0c;列變成行。在Java中&#xff0c;我們可以通過編寫一個方法來實現二維數組的轉置。下面&#xff0c;我將詳細介紹如何在Java中完成這一任務&#xff0c;并提供完整的代碼示例。 編…

鴻蒙語言基礎類庫:【@ohos.util.TreeSet (非線性容器TreeSet)】

非線性容器TreeSet 說明&#xff1a; 本模塊首批接口從API version 8開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。 T…

HDFS 塊重構和RedundancyMonitor詳解

文章目錄 1. 前言2 故障塊的重構(Reconstruct)2.1 故障塊的狀態定義和各個狀態的統計信息2.2 故障文件塊的查找收集2.5.2.1 misReplica的檢測2.5.2.2 延遲隊列(postponedMisreplicatedBlocks)的構造和實現postponedMisreplicatedBlocks中Block的添加postponedMisreplicatedBloc…

綠盟培訓入侵排查

一、webshell 排查 1、文件特征 2、windows 3、linux 4、內存馬 二、web 日志排查 1、日志排查 2、中間件報錯排查 三、服務器失陷處置

Element-UI Select組件使用value-key屬性,讓綁定值可以為一個對象

當我們使用 Elemet UI 的 Select 組件的綁定值是一個對象 :value="item" 如: <el-form-item label="選擇應用" prop="appInfo"><el-select v-model=

每日一題cf

文章目錄 Swap and Reverse題意&#xff1a;題解&#xff1a;代碼&#xff1a; Swap and Reverse 題意&#xff1a; 給定一個長度為n的正整數數組&#xff0c;給定k。可以進行任意次一下操作 選定 i i i&#xff0c;交換 a i a_{i} ai?和 a i 2 a_{i2} ai2?的值選定 i i …

Windows環境人大金倉數據庫命令常規操作

Windows環境人大金倉數據庫命令常規操作 下文將介紹人大金倉數據庫常見命令操作&#xff0c;包括具體使用命令如創建數據庫、創建用戶、授權等相關操作。 1、打開命令提示符窗口 找到數據庫安裝目錄進入server/bin目錄&#xff0c;輸入cmd,打開命令提示符窗口&#xff0c;如…

Java getSuperclass和getGenericSuperclass

1.官方API對這兩個方法的介紹 getSuperclass : 返回表示此 Class 所表示的實體&#xff08;類、接口、基本類型或 void&#xff09;的超類的 Class。如果此 Class 表示 Object 類、一個接口、一個基本類型或 void&#xff0c;則返回 null。如果此對象表示一個數組類&#xff…

探秘微信廣告設計組:一位產品體驗設計師的日常與成長

目錄 我的工位&#xff1a;靈感與回憶的匯聚地 我們的設計&#xff1a;用心定格每一個瞬間 設計的多樣性&#xff1a;從社交廣告到過年IP形象 咖啡與工作的日常&#xff1a;從抵觸到入坑 廣告設計&#xff1a;我選擇&#xff0c;我熱愛 實習生的培養&#xff1a;實踐與思…

Qt(四)事件

文章目錄 一、概念二、&#xff08;一&#xff09;&#xff08;二&#xff09;QImage類&#xff08;三&#xff09;鼠標事件和鍵盤事件1. 鼠標事件2. 鍵盤事件 &#xff08;四&#xff09;定時器事件1. 采用定時器事件2. QTimer定時器類 三、 一、概念 事件是由窗口系統或者自…

充電樁項目

1. 多對一&#xff08;多個監測設備檢測&#xff0c;數據發送給一個服務器&#xff09; 2. 原理 充電樁溫度變化引起PT100阻值變換&#xff08;測溫電流衰減微弱&#xff0c;幾乎恒定&#xff0c;電壓隨之變化)&#xff0c;經過測溫模塊轉化成電壓的變化&#xff08;內部是電流…

小程序內容管理系統設計

設計一個小程序內容管理系統&#xff08;CMS&#xff09;時&#xff0c;需要考慮以下幾個關鍵方面來確保其功能完善、用戶友好且高效&#xff1a; 1. 需求分析 目標用戶&#xff1a;明確你的目標用戶群體&#xff0c;比如企業、媒體、個人博主等&#xff0c;這將決定系統的功…

zynq啟動和程序固化流程

普通FPGA啟動 FPGA的啟動方式主要包含主動模式、被動模式和JTAG模式。 主動模式&#xff08;AS模式&#xff09; 當FPGA器件上電時&#xff0c;它作為控制器從配置器件EPCS中主動發出讀取數據信號&#xff0c;并將EPCS的數據讀入到自身中&#xff0c;實現對FPGA的編程。這種…

Mac的系統數據怎么刪除 cleanmymac會亂刪東西嗎 cleanmymac有用嗎

作為一款專業級的蘋果電腦清理軟件&#xff0c;CleanMyMac可以精準識別系統垃圾&#xff0c;有效防止Mac系統數據被誤刪。軟件可以深入系統底層&#xff0c;清理無用的系統數據&#xff0c;優化蘋果電腦設置&#xff0c;提升Mac系統性能。有關Mac的系統數據可以刪嗎&#xff0c…

javascript如何定義數組和從數組取值,獲取數組長度

javascript如何定義數組 javascript定義數組的格式是 var 數組名[數組元素]或者 let 數組名[數組元素] javascript數組和python的列表很相似&#xff0c;真要懶的話&#xff0c;不用定義數據類型&#xff0c;不像c語言和java那樣限制數據類型。 定義數組示例代碼 <bod…