第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不理解這種在 2 個字符串之間查找子序列的迭代方法

不理解這種在 2 個字符串之間查找子序列的迭代方法

HUWWW 2023-05-25 17:38:37
這是問題:編寫一個名為的函數(shù)isSubsequence,它接受兩個字符串并檢查第一個字符串中的字符是否構成第二個字符串中字符的子序列。換句話說,函數(shù)應該檢查第一個字符串中的字符是否出現(xiàn)在第二個字符串中的某個地方,而沒有改變它們的順序。我有下面的解決方案,但有幾個部分我沒有得到:為什么需要:if (!str1) return true;我也沒有得到這一行:if (i===str1.length) return true;將不勝感激任何解釋謝謝!function isSubsequence(str1, str2) {  var i = 0;  var j = 0;  if (!str1) return true;  while (j < str2.length) {    if (str2[j] === str1[i]) i++;    if (i === str1.length) return true;    j++;  }  return false;}
查看完整描述

2 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

為什么需要:if (!str1) return true;

這是一個邊界案例。它檢查第一個字符串是否為空。有人會問:空字符串是否總是另一個字符串的子序列?答案是:是的。

可以使該語句看起來與另一個if語句相同:if (i === str1.length) return true;。那也行。它表明實際上它正在執(zhí)行相同的測試,但是對于i0 的情況。

如果保證第二個字符串不為空,則實際上不需要此語句,因為在這種情況下,循環(huán)將進行第一次迭代,并且其他語句的條件將為真,因此該函數(shù)仍會返回真if。但是,如果兩個字符串都是空的,該函數(shù)也應該返回 true,如果您沒有此語句,則不會發(fā)生這種情況。

我也沒有得到這一行:if (i===str1.length) return true;

istr1代表你在其中找到的字符數(shù)str2(按順序)。所以如果i等于第一個字符串的長度,那么你就知道你已經找到了 : 的所有字符,str1所以繼續(xù)循環(huán)是沒有意義的,因為沒有其他東西可以找到。因此,是時候以積極的結果退出該功能了。

選擇

你可以讓循環(huán)條件包括這個“退出”條件的否定,這樣你就不再需要了if

function isSubsequence(str1, str2) {

  let i = 0;

  // Continue as long as there are characters to compare...

  for (let j = 0; i < str1.length && j < str2.length; j++) {

    if (str2[j] === str1[i]) i++;

  }

  // Now return true if, and only when, all of str1 was found in str2

  return i === str1.length;

}


查看完整回答
反對 回復 2023-05-25
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

  1. if (!str1) return true;

當?shù)谝粋€字符串為空字符串時,此語句返回 true。因為我們可以通過刪除另一個字符串的所有字符來導出一個空字符串。這就是為什么空字符串是任何字符串的子序列。除非明確提到我們正在尋找一個非空子序列。

  1. if (i===str1.length) return true;

當我們檢查兩個字符串的字符是否相等時,如果我們到達第一個字符串的末尾并且所有前面的字符都相等,我們可以說 str1 是 str2 的子序列。此時我們需要從函數(shù)中返回,否則,你將無法在str1中找到另一個字符。你可以看到下面的例子。

str1 = 'abc'。

str2 = 'abcdefg'。

我=0,j=0:

str1[i] = 'a'

str2[j] = 'a'

我=1,j=1:

str1[i] = 'b'

str2[j] = 'b'

我=2,j=2:

str1[i] = 'c'

str2[j] = 'c'

此時我們在 str1 的末尾?,F(xiàn)在,如果我們不返回,那么會發(fā)生什么?

我=3,j=3

str1[3] = '垃圾值'

str2[3] = 'd'

它們不匹配,所以我們不斷增加 j 的值,但我們不會更新 i 的值。因為if (str2[j] === str1[i]) i++;。在那種情況下,我們將遍歷 str2 長度,最后我們將返回 false。這是一個錯誤的結果。


查看完整回答
反對 回復 2023-05-25
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號