棧和字符串,力扣.43.字符串相乘力扣1047.刪除字符串中的所有相鄰重復項力扣.844比較含退格的字符串力扣227.基本計算器II

目錄

力扣.43.字符串相乘

力扣1047.刪除字符串中的所有相鄰重復項

力扣.844比較含退格的字符串

力扣227.基本計算器II


力扣.43.字符串相乘

我們剩下的落兩個數字即可。

class Solution {public static String multiply(String num1, String num2) {int m=num1.length();int n=num2.length();int[]a=new int[m+n-1];int p=1;int sum=m+n-1;
//處理特殊情況,假如出現前導0的情況,即123乘0,此時會出現0,0,0,0這種情況,多個0 是沒用的,所以遇到0直接返回即可//   if(num1.equals("0")||num2.equals("0"))return "0";StringBuffer s=new StringBuffer();for(int j=n-1;j>=0;j--){int  k=sum-p;for(int i=m-1;i>=0;i--){a[k--]+=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');}p++;}for(int i=sum-1;i>0;i--){a[i-1]+=a[i]/10;a[i]=a[i]%10;}for(int i=0;i<a.length;i++){s.append(a[i]);}//我們可以想一下什么情況會有前導0,只有當x*0時候會出現前導0,因此我們可以上面那種處理方式
//也可以用下面這種方式,我必須要保持前導0,最多存在一個就是0,其余的假如第一個是0,我們就把它刪除while(s.length()>1&&s.charAt(0)=='0'){s.deleteCharAt(0);}return s.toString();}}

while(s.length()>1&&s.charAt(0)=='0'){

s.deleteCharAt(0);

}

力扣1047.刪除字符串中的所有相鄰重復項

class Solution {public  static String removeDuplicates(String s) {Stack<Character>a=new Stack<>();for(int i=0;i<s.length();i++){if(!a.isEmpty()&&a.peek()==s.charAt(i)){a.pop();}else{a.add(s.charAt(i));}}StringBuffer ret=new StringBuffer();while (!a.isEmpty()){ret.append(a.pop());}return ret.reverse().toString();}
}

力扣.844比較含退格的字符串

用棧進行基本的模擬,然后假如出現#就刪除

class Solution {public boolean backspaceCompare(String s, String t) {Stack<Character>a=new Stack<>();Stack<Character>b=new Stack<>();for(int i=0;i<s.length();i++){if(!a.isEmpty()&&s.charAt(i)=='#'){a.pop();}else if(a.isEmpty()&&s.charAt(i)=='#'){continue;}else{a.add(s.charAt(i));}}for(int i=0;i<t.length();i++){if(!b.isEmpty()&&t.charAt(i)=='#'){b.pop();}else if(b.isEmpty()&&t.charAt(i)=='#'){continue;}else{b.add(t.charAt(i));}}if(a.size()!=b.size())    return false;while(!a.isEmpty()){if(a.pop()!=b.pop()){return false;}}return true;}
}

力扣227.基本計算器II

考驗代碼能力細節很多,使用兩個棧,當然這么寫也是因為我菜,題解肯定比我好很多,我一會抄一手,學習一下,

public static int calculate(String s) {char[]ss=s.toCharArray();//這個來存儲符號Stack<Character>a=new Stack<>();//這個存儲數字,為什么要雙棧,因為假如超過100000,字符無法存儲這么大的整數Stack<Integer>b=new Stack<>();int tmp=0;int k=0;for(int i=0;i<ss.length;i++){if(ss[i]==' ') continue;//思考一下,假如342怎么辦,往前面找是否是一個好的想法 假如一個情況3*42/66換句話說,我們應該計算第一個循環就把這種統計出來//而他更需要進行一個所謂的優先處理,只要他不是符號,我們都檢查一下(這個應該是優于乘除法的)if(ss[i]-'0'>=0) {StringBuffer p = new StringBuffer();//假如前一個是4,來一個循環遍歷一手while (i < ss.length && ss[i] - '0' >= 0) {p.append((ss[i]-'0'));if(i+1<ss.length&&ss[i+1]-'0'>=0) {//只有當下一個不是符號的時候,才可以加加i++;}else{break;}}k = Integer.valueOf(p.toString());b.add( k);} else if(ss[i]-'0'<0){a.add(ss[i]);}//假如是乘法或者是除法我們進行優先處理,因為沒有括號,并且當前值不可以是符號就進行計算,進行計算的時候,一定保證是數字if(!a.isEmpty()&&ss[i]-'0'>=0&&(a.peek()=='*'||a.peek()=='/')){if(a.peek()=='*'){a.pop();tmp=b.pop()*b.pop();b.add(tmp);}else if(a.peek()=='/'){a.pop();int t=b.pop();tmp=b.pop()/t;b.add(tmp);}}//當他是符號時候,先去添加符號}
//上面我們相當于把乘法和除法處理完成,最后應該只剩下加法了//3+2+3+4
//        tmp=0; //暫時保存值
//int sum=0;while (!a.isEmpty()&&!b.isEmpty()) {//處理加法的情況while (!a.isEmpty()&&!b.isEmpty()&&a.peek() == '+') {a.pop();sum+= b.pop();}while(!a.isEmpty()&&!b.isEmpty()&&a.peek() == '-') {a.pop();int t = b.pop();sum-=t;}}if(!b.isEmpty()) sum+=b.pop();return sum;}

較為優秀的寫法,使用了一個棧,并且把上面我的邏輯相當于更加一步的理清,并且刪除了一些不必要的冗余代碼

class Solution {public static int calculate(String s) {char[]ss=s.toCharArray();//這個來存儲符號Stack<Integer>b=new Stack<>();char op='a';int k=0;for(int i=0;i<ss.length;i++){if(ss[i]==' ') continue;if(ss[i]-'0'>=0){StringBuffer p = new StringBuffer();//這里的想法是,我們不去處理什么倍數乘10,乘100,太過麻煩,不如就使用字符串的拼接,直接拼到一起,這樣會更省心,但是帶來的就是時間while (i < ss.length && ss[i] - '0' >= 0) {p.append((ss[i]-'0'));if(i+1<ss.length&&ss[i+1]-'0'>=0) {i++;} //只有當下一個不是符號的時候,才可以加加else{break;}}k = Integer.valueOf(p.toString());//假如是乘法或者是除法我們進行優先處理,因為沒有括號,并且當前值不可以是符號就進行計算,進行計算的時候,一定保證是數字if(op=='*'){ b.add(b.pop()*k);}else if(op=='/'){b.add(b.pop()/k);}else if(op=='-'){b.add(-k); }else{b.add(k); } op='+';continue;}//當他是符號時候,先去添加符號else {op=ss[i]; continue;}}
//上面我們相當于把乘法和除法,減法處理完成,最后應該只剩下加法了int sum=0;while(!b.isEmpty()){sum+=b.pop();}return sum;}
}

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

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

相關文章

Spring Boot單元測試實戰指南:從零到高效測試

在Spring Boot開發中&#xff0c;單元測試是保障代碼質量的核心環節。本文將基于實際開發場景&#xff0c;手把手教你如何快速實現分層測試、模擬依賴、編寫高效斷言&#xff0c;并分享最佳實踐&#xff01; 一、5分鐘環境搭建 添加依賴 在pom.xml中引入spring-boot-starter-te…

React狀態提升深度解析:原理、實戰與最佳實踐

一、狀態提升的本質認知 React狀態提升&#xff08;State Lifting&#xff09;是組件間通信的核心模式&#xff0c;其本質是通過組件樹層級關系重構實現狀態共享。與傳統父子傳參不同&#xff0c;它通過將狀態提升到最近的共同祖先組件&#xff0c;建立單向數據流高速公路。 …

https nginx 負載均衡配置

我的系統是OpenEuler。 安裝nginx yum install -y nginx 啟動&開機啟動 systemctl start nginx systemctl enable nginx 自定義conf配置文件 cat <<EOF >> /etc/nginx/conf.d/load_balancer.conf upstream backend {ip_hash; # 防止驗證碼驗證失敗server…

各種插值方法的Python實現

插值方法的Python實現 1. 線性插值&#xff08;Linear Interpolation&#xff09; 原理&#xff1a;用直線連接相鄰數據點&#xff0c;計算中間點的值。 實現&#xff1a; import numpy as np from scipy.interpolate import interp1dx np.array([0, 1, 2, 3, 4]) y np.arr…

重新定義戶外防護!基于DeepSeek的智能展開傘棚系統技術深度解析

從“手動操作”到“感知決策”&#xff0c;AI重構城市空間彈性 全球極端天氣事件頻發&#xff0c;傳統傘棚依賴人工展開/收納&#xff0c;存在響應滯后&#xff08;暴雨突襲時展開需3-5分鐘&#xff09;、抗風能力弱&#xff08;8級風損毀率超60%&#xff09;、空間利用率低等痛…

Redis 基礎和高級用法入門

redis 是什么&#xff1f; Redis是一個遠程內存數據庫&#xff0c;它不僅性能強勁&#xff0c;而且還具有復制特性以及為解決問題而生的獨一無二的數據模型。Redis提供了5種不同類型的數據結構&#xff0c;各式各樣的問題都可以很自然地映射到這些數據結構上&#xff1a…

常見數據庫關鍵字示例 SQL 及執行順序分析(帶詳細注釋)

示例 SQL 及執行順序分析&#xff08;帶詳細注釋&#xff09; 示例 1&#xff1a;基礎查詢&#xff08;含多表關聯、過濾、分組、排序&#xff09; SELECT -- 1. 選擇字段&#xff08;包含聚合函數和別名&#xff09;e.department, COUNT(e.employee_id) AS total_employees, …

設計模式--建造者模式詳解

建造者模式 建造者模式也屬于創建型模式&#xff0c;它提供了一種創建對象的最佳方式 定義&#xff1a;將一個復雜對象的構建和它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示&#xff08;假設有不同的建造者實現類&#xff0c;可以產生不同的產品&#xff09…

PCB 過孔銅厚的深入指南

***前言&#xff1a;在上一期的文章中介紹了PCB制造的工藝流程&#xff0c;但仍然想在過孔的銅厚和PCB的過孔厚徑比兩個方面再深入介紹。 PCB銅厚的定義 電路中銅的厚度以盎司(oz)**表示。那么&#xff0c;為什么用重量單位來表示厚度呢? 盎司(oz)的定義 將1盎司(28.35 克)的銅…

如何配置 Conda 使用鏡像源加速

如何配置 Conda 使用鏡像源加速 為了提高使用 Anaconda 或 Miniconda 時包管理的速度&#xff0c;特別是在國內網絡環境下&#xff0c;可以通過配置鏡像源來實現更快的下載。以下是詳細的步驟說明&#xff1a; 1. 安裝 Conda&#xff08;如果尚未安裝&#xff09; 如果你還沒…

【k8s】k8s是怎么實現自動擴縮的

Kubernetes 提供了多種自動擴縮容機制&#xff0c;主要包括 Pod 水平自動擴縮&#xff08;HPA&#xff09;、垂直 Pod 自動擴縮&#xff08;VPA&#xff09; 和 集群自動擴縮&#xff08;Cluster Autoscaler&#xff09;。以下是它們的實現原理和配置方法&#xff1a; 1. Pod …

Reflex 完全指南:用 Python 構建現代 Web 應用的終極體驗

“寫 Python&#xff0c;就能構建 Web 前端。”——這不再是夢想&#xff0c;而是由 Reflex 帶來的現實。 過去&#xff0c;構建一個現代 Web 應用意味著你要學會前端&#xff08;React/JS/HTML/CSS&#xff09; 后端&#xff08;Flask/Django&#xff09; API 交互&#xff08…

Vue實戰(08)解決 Vue 項目中路徑別名 `@` 在 IDE 中報錯無法識別的問題

一、引言 ? 在 Vue 項目開發過程中&#xff0c;路徑別名是一個非常實用的特性&#xff0c;它能夠幫助開發者簡化文件引用路徑&#xff0c;提高代碼的可讀性和可維護性。其中&#xff0c; 作為一個常見的路徑別名&#xff0c;通常被用來指向項目的 src 目錄。然而&#xff0c;…

5.學習筆記-SpringMVC(P61-P70)

SpringMVC-SSM整合-接口測試 (1)業務層接口使用junit接口做測試 (2)表現層用postman做接口測試 (3)事務處理— 1&#xff09;在SpringConfig.java&#xff0c;開啟注解&#xff0c;是事務驅動 2&#xff09;配置事務管理器&#xff08;因為事務管理器是要配置數據源對象&…

[論文閱讀]REPLUG: Retrieval-Augmented Black-Box Language Models

REPLUG: Retrieval-Augmented Black-Box Language Models REPLUG: Retrieval-Augmented Black-Box Language Models - ACL Anthology NAACL-HLT 2024 在這項工作中&#xff0c;我們介紹了RePlug&#xff08;Retrieve and Plug&#xff09;&#xff0c;這是一個新的檢索增強型…

Mysql的深度分頁查詢優化

一、深度分頁為什么慢&#xff1f; 當執行 SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 時&#xff1a; MySQL 會掃描前 1,000,010 行&#xff0c;丟棄前 100 萬行&#xff0c;僅返回 10 行。偏移量&#xff08;offset&#xff09;越大&#xff0c;掃描行數越多&…

最新扣子(Coze)案例教程:Excel數據生成統計圖表,自動清洗數據+轉換可視化圖表+零代碼,完全免費教程

大家好&#xff0c;我是斜杠君。 知識星球群有同學和我說每天的工作涉及很多數據表的重復操作&#xff0c;想學習Excel數據表通過大模型自動轉數據圖片的功能。 今天斜杠君就帶大家一起搭建一個智能體&#xff0c;以一個銷售行業數據為例&#xff0c;可以快速實現自動清洗Exc…

Uniapp 中緩存操作指南

在 Uniapp 中,你可以使用三種方式操作緩存:同步方法、異步方法和 Vuex 持久化存儲。以下是詳細的設置、獲取和清除緩存的方法: 1. 同步方法 設置緩存 uni.setStorageSync(key, value); // 示例 uni.setStorageSync(token, abc123); 獲取緩存 const value = uni.getStor…

k8s的yaml文件里的volume跟volumeMount的區別

volume 是 Pod 級別的資源&#xff0c;用于定義存儲卷。它是一個獨立于容器的存儲資源&#xff0c;可以被一個或多個容器共享使用。volume 的定義位于 Pod 的 spec.volumes 部分。 特點 獨立性&#xff1a;volume 是 Pod 的一部分&#xff0c;而不是容器的一部分。它獨立于容…

梅毒單陽能否通過國企體檢?

國企體檢通常會參照公務員體檢標準進行&#xff0c;梅毒檢測是其中的常規項目。 一、明確“梅毒單陽”的定義 檢測指標解析 TPPA陽性RPR陰性&#xff1a;可能為既往感染已治愈&#xff0c;或極早期/晚期梅毒&#xff1b; RPR陽性TPPA陰性&#xff1a;需警惕假陽性&#xff08…