中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

個(gè)人網(wǎng)站制作網(wǎng)站2022國內(nèi)外重大新聞事件10條

個(gè)人網(wǎng)站制作網(wǎng)站,2022國內(nèi)外重大新聞事件10條,網(wǎng)站制作資料收集,大學(xué)網(wǎng)頁設(shè)計(jì)期末作品文章目錄 一、題目二、C# 題解法一:從第一個(gè)不同位置處判斷后續(xù)相同子串法二:前后序遍歷判斷第一個(gè)不同字符的位置關(guān)系 優(yōu)化法一法二 一、題目 字符串有三種編輯操作:插入一個(gè)英文字符、刪除一個(gè)英文字符或者替換一個(gè)英文字符。 給定兩個(gè)字符串&#xff…

文章目錄

  • 一、題目
  • 二、C# 題解
    • 法一:從第一個(gè)不同位置處判斷后續(xù)相同子串
    • 法二:前后序遍歷判斷第一個(gè)不同字符的位置關(guān)系
  • 優(yōu)化
    • 法一
    • 法二

一、題目

??字符串有三種編輯操作:插入一個(gè)英文字符、刪除一個(gè)英文字符或者替換一個(gè)英文字符。 給定兩個(gè)字符串,編寫一個(gè)函數(shù)判定它們是否只需要一次(或者零次)編輯。

??點(diǎn)擊此處跳轉(zhuǎn)題目。

示例 1:

輸入:
first = “pale”
second = “ple”
輸出: True

示例 2:

輸入:
first = “pales”
second = “pal”
輸出: False

二、C# 題解

法一:從第一個(gè)不同位置處判斷后續(xù)相同子串

??由題可知,在不同位置處,左方和右方的子串應(yīng)相同。因此,先尋找到第一個(gè)不同的字符,判斷其后方子串是否一致:

  1. 替換:IsSame(first, i + 1, second, j + 1)
    h o r s e ( f i r s t ) i : ↑ h o r t e ( s e c o n d ) j : ↑ \begin{array}{l} & h & o & r & s & e & (first)\\ i:& & & & \uparrow & \\\\ & h & o & r & t & e & (second)\\ j:& & & & \uparrow & \end{array} i:j:?hh?oo?rr?st?ee?(first)(second)?

  2. 插入:IsSame(first, i, second, j + 1)
    h o r s e ( f i r s t ) i : ↑ h o r t s e ( s e c o n d ) j : ↑ \begin{array}{l} & h & o & r & s & e & & (first)\\ i:& & & & \uparrow & \\\\ & h & o & r & t & s & e & (second)\\ j:& & & & \uparrow & \end{array} i:j:?hh?oo?rr?st?es?e?(first)(second)?

  3. 刪除:IsSame(first, i + 1, second, j)
    h o r s e ( f i r s t ) i : ↑ h o r e ( s e c o n d ) j : ↑ \begin{array}{l} & h & o & r & s & e & (first)\\ i:& & & & \uparrow & \\\\ & h & o & r & e & & (second)\\ j:& & & & \uparrow & \end{array} i:j:?hh?oo?rr?se?e?(first)(second)?

public class Solution {// 方法:從第一個(gè)不同位置處判斷后續(xù)相同子串public bool OneEditAway(string first, string second) {int i = 0, j = 0; // 雙指針,i 遍歷 first,j 遍歷 second(可以用一個(gè)指針代替,因?yàn)?i 時(shí)刻等于 j)// 前序遍歷尋找第一處不同while (i < first.Length && j < second.Length) { if (first[i] != second[j]) break;i++; j++;}// 判斷字符串相等if (i == first.Length && j == second.Length) return true;// 判斷后續(xù)內(nèi)容是否相同return IsSame(first, i + 1, second, j) || IsSame(first, i, second, j + 1) || IsSame(first, i + 1, second, j + 1);}// 判斷從位置 i 開始的 first 字符串和從位置 j 開始的 second 字符串是否相等public bool IsSame(string first, int i, string second, int j) {// 判斷界限內(nèi)每個(gè)字符是否相等while (i < first.Length && j < second.Length) {if (first[i] != second[j]) return false;i++; j++;}// 判斷是否都到達(dá)了字符串末尾,避免出現(xiàn)其中一個(gè)字符串仍有后續(xù)內(nèi)容的情況return i == first.Length && j == second.Length;}
}
  • 時(shí)間復(fù)雜度: O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)),其中 m , n m,n m,n 分別為字符串 f i r s t , s e c o n d first, second first,second 的長度。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1)。

法二:前后序遍歷判斷第一個(gè)不同字符的位置關(guān)系

??使用前序遍歷找出兩個(gè)字符串不同字符的第一個(gè)位置 firstDif1, firstDif2,再用后序遍歷找出兩個(gè)字符串不同字符的第一個(gè)位置 lastDif1, lastDif2。依據(jù)這四個(gè)位置的關(guān)系來判斷字符串的關(guān)系:

  1. 相等:firstDif1 == first.Length && lastDif1 == -1
    至于 firstDif2 == second.Length && lastDif2 == -1 可以不判斷,因?yàn)楸囟ù嬖凇?br /> h o r s e l a s t D i f 1 : ↑ ↑ : f i r s t D i f 1 h o r s e l a s t D i f 2 : ↑ ↑ : f i r s t D i f 2 \begin{array}{l} & & h & o & r & s & e & &\\ lastDif1: & \green\uparrow & & & & & & \red\uparrow & :firstDif1\\\\ & & h & o & r & s & e & &\\ lastDif2: & \green\uparrow & & & & & & \red\uparrow & :firstDif2 \end{array} lastDif1:lastDif2:??hh?oo?rr?ss?ee??:firstDif1:firstDif2?

  2. 替換:firstDif1 == lastDif1 && firstDif2 == lastDif2
    h o r s e f i r s t D i f 1 : ↑ ↑ : l a s t D i f 1 h o r t e f i r s t D i f 2 : ↑ ↑ : l a s t D i f 2 \begin{array}{l} & & h & o & r & s & e & &\\ firstDif1: & & & & & \red\uparrow\green\uparrow & & & :lastDif1\\\\ & & h & o & r & t & e & &\\ firstDif2: & & & & & \red\uparrow\green\uparrow & & & :lastDif2 \end{array} firstDif1:firstDif2:??hh?oo?rr?st?ee??:lastDif1:lastDif2?

  3. 插入:firstDif1 - 1 == lastDif1 && firstDif2 == lastDif2
    h o r s e l a s t D i f 1 : ↑ ↑ : f i r s t D i f 1 h o r t s e f i r s t D i f 2 : ↑ ↑ : l a s t D i f 2 \begin{array}{l} & & h & o & r & s & e & &\\ lastDif1: & & & & \green\uparrow & \red\uparrow & & & :firstDif1\\\\ & & h & o & r & t & s & e & &\\ firstDif2: & & & & & \red\uparrow\green\uparrow & & & :lastDif2 \end{array} lastDif1:firstDif2:??hh?oo?rr?st?es?e?:firstDif1:lastDif2??

  4. 刪除:firstDif1 == lastDif1 && firstDif2 - 1 == lastDif2
    h o r s e f i r s t D i f 1 : ↑ ↑ : l a s t D i f 1 h o r e l a s t D i f 2 : ↑ ↑ : f i r s t D i f 2 \begin{array}{l} & & h & o & r & s & e & &\\ firstDif1: & & & & & \red\uparrow\green\uparrow & & & :lastDif1\\\\ & & h & o & r & e & &\\ lastDif2: & & & & \green\uparrow & \red\uparrow & & & :firstDif2 \end{array} firstDif1:lastDif2:??hh?oo?rr?se?e??:lastDif1:firstDif2?

public class Solution {// 前后序遍歷判斷第一個(gè)不同字符的位置關(guān)系public bool OneEditAway(string first, string second) {int firstDif1, firstDif2, lastDif1, lastDif2;FirstDiffer(first, out firstDif1, second, out firstDif2);LastDiffer(first, out lastDif1, second, out lastDif2);// 相等if (firstDif1 == first.Length && lastDif1 == -1) return true;// 替換if (firstDif1 == lastDif1 && firstDif2 == lastDif2) return true;// 插入if (firstDif1 - 1 == lastDif1 && firstDif2 == lastDif2) return true;// 刪除if (firstDif1 == lastDif1 && firstDif2 - 1 == lastDif2) return true;return false;}// 前序?qū)ふ业谝粋€(gè)不同字符的位置public void FirstDiffer(string first, out int firstDif1, string second, out int firstDif2) {firstDif1 = firstDif2 = 0;while (firstDif1 < first.Length && firstDif2 < second.Length) {if (first[firstDif1] != second[firstDif2]) return;firstDif1++; firstDif2++;}}// 后序?qū)ふ业谝粋€(gè)不同字符的位置public void LastDiffer(string first, out int lastDif1, string second, out int lastDif2) {lastDif1 = first.Length - 1;lastDif2 = second.Length - 1;while (lastDif1 >= 0 && lastDif2 >= 0) {if (first[lastDif1] != second[lastDif2]) return;lastDif1--; lastDif2--;}}
}
  • 時(shí)間復(fù)雜度: O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n)),其中 m , n m,n m,n 分別為字符串 f i r s t , s e c o n d first, second first,second 的長度。
  • 空間復(fù)雜度: O ( 1 ) O(1) O(1)。

優(yōu)化

??看到了題解中有大佬使用手段確保 first 長度不大于 second,寫法很好,借鑒一下。由于此題插入和刪除具有對(duì)稱性,因此可以做出如下優(yōu)化:

法一

??可以不判斷刪除的情況,減少一次遍歷。

public class Solution {public bool OneEditAway(string first, string second) {if (first.Length > second.Length) // 確保 first 長度不大于 secondreturn OneEditAway(second, first);int i = 0, j = 0; while (i < first.Length && j < second.Length) { if (first[i] != second[j]) break;i++; j++;}// 判斷字符串相等,只用判斷 second 是否達(dá)到末端即可if (j == second.Length) return true;// 判斷后續(xù)內(nèi)容是否相同,少判斷一種情況return IsSame(first, i, second, j + 1) || IsSame(first, i + 1, second, j + 1);}public bool IsSame(string first, int i, string second, int j) {while (i < first.Length && j < second.Length) {if (first[i] != second[j]) return false;i++; j++;}return i == first.Length && j == second.Length;}
}

法二

??法二沒有必要了,因?yàn)闇p少“刪除”的情況,只減少了一次 int 比較的判斷,而可能多帶來一次參數(shù)拷貝(firstsecond 互換傳入?yún)?shù))。

http://m.risenshineclean.com/news/59242.html

相關(guān)文章:

  • 山東青島網(wǎng)站建設(shè)公司哪家專業(yè)制作網(wǎng)頁的流程步驟
  • 長寧網(wǎng)站推廣公司網(wǎng)絡(luò)推廣渠道公司
  • 學(xué)做衣服網(wǎng) 繽紛網(wǎng)站查收錄網(wǎng)站
  • 江陰建設(shè)銀行網(wǎng)站全網(wǎng)自媒體平臺(tái)大全
  • 網(wǎng)站建設(shè)相關(guān)推薦網(wǎng)絡(luò)優(yōu)化工程師前景
  • 做網(wǎng)站聽的純音樂seo關(guān)鍵詞首頁排名代發(fā)
  • 網(wǎng)站開發(fā)工具 楓子科技谷歌代運(yùn)營
  • 怎么制作網(wǎng)站seo公司優(yōu)化方案
  • wordpress自定義樣式什么是seo文章
  • 東莞手機(jī)網(wǎng)站制作公司鄭州網(wǎng)站顧問
  • 網(wǎng)站圖片怎么做緩存網(wǎng)店培訓(xùn)騙局
  • 金融行業(yè)網(wǎng)站制作天津百度推廣公司
  • 網(wǎng)站建設(shè)工具哪個(gè)好用營銷型企業(yè)網(wǎng)站制作
  • 婚紗攝影行業(yè)網(wǎng)站網(wǎng)站建設(shè)制作費(fèi)用
  • 不懂的人做網(wǎng)站用織夢(mèng) 還是 cms企業(yè)網(wǎng)站seo哪里好
  • 男女做曖曖視頻免費(fèi)網(wǎng)站網(wǎng)站優(yōu)化軟件哪個(gè)好
  • vue 做雙語版網(wǎng)站千鋒教育學(xué)費(fèi)
  • wordpress 添加搜索欄搜索引擎優(yōu)化的核心及內(nèi)容
  • 博物館網(wǎng)站制作搜什么關(guān)鍵詞比較刺激
  • 網(wǎng)站模板上傳工具廣告詞
  • 諸城做網(wǎng)站找個(gè)人鏈接檢測工具
  • app開發(fā)公司認(rèn)可湖南嵐鴻推 薦整站優(yōu)化
  • 做網(wǎng)站服務(wù)器e3安徽網(wǎng)絡(luò)建站
  • 怎么通過建站來賺錢西安網(wǎng)站維護(hù)公司
  • 在哪個(gè)網(wǎng)站開發(fā)國外客戶游戲代理免費(fèi)加盟
  • 網(wǎng)站上點(diǎn)擊圖片局部放大如何做百度云搜索引擎入口百度網(wǎng)盤
  • 做網(wǎng)站要備案嗎美國最新新聞?lì)^條
  • 怎么用PS做珠寶網(wǎng)站上海seo培訓(xùn)中心
  • 蕪湖推廣公司網(wǎng)站排名軟件優(yōu)化
  • 鄭州漢獅做網(wǎng)站多少錢谷歌seo網(wǎng)站運(yùn)營