精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

字符串操作大全:面試準備和日常編碼所需一文打盡

開發 前端
字符串是一系列字符,由常數或變量構成。它是編程語言中必不可少的數據類型。本文中將重點關注JavaScript字符串操作,但其原理和算法也可應用于其他語言。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

字符串是一系列字符,由常數或變量構成。它是編程語言中必不可少的數據類型。本文中將重點關注JavaScript字符串操作,但其原理和算法也可應用于其他語言。

參加技術面試時,面試官常常會關注以下內容:

  • 編程技術
  • 語言能力
  • 解題技巧

本文不僅可以讓你成功通過技術面試,對日常編碼也很有用。代碼要點格式中,我們列出了JavaScript字符串的幾點重要特性,這是編程技能的基礎。其中包括存在了20年的屬性和方法,也涵蓋ES2021中的特性。如有不清楚之處,可以有針對性地查漏補缺。JavaScript編程語言可以解決許多應用問題。這些算法或其變體,經常出現在真實的面試場景中。

字符串屬性和方法

字符串用于表示和操作字符序列。字符串屬性和方法有很多。以下是可供參考的代碼示例,包括ES2020中的“matchAll”和ES2021中的“replaceAll”。

  1. const str = Today is a nice day! ;   
  2.       console.log(str.length); // 20 
  3.       console.log(str[2]); // "d" 
  4.       console.log(typeof str); // "string" 
  5.       console.log(typeof str[2]); // "string" 
  6.       console.log(typeofString(5)); //"string" 
  7.       console.log(typeofnewString(str)); //"object" 
  8.       console.log(str.indexOf( is )); // 6 
  9.       console.log(str.indexOf( today )); // -1 
  10.       console.log(str.includes( is )); // true 
  11.       console.log(str.includes( IS )); // false 
  12.       console.log(str.startsWith( Today )); // true 
  13.       console.log(str.endsWith( day )); // false 
  14.       console.log(str.split(   )); // ["Today", "is", "a", "nice","day!"] 
  15.       console.log(str.split(  )); // ["T", "o", "d", "a","y", " ", "i", "s", " ","a", " ", "n", "i", "c","e", " ", "d", "a", "y","!"] 
  16.       console.log(str.split( a )); // ["Tod", "y is ", " nice d","y!"] 
  17.       console.log(str +1+2); // "Today is a nice day!12" 
  18.       console.log(str + str); // "Today is a nice day!Today is a niceday!" 
  19.       console.log(str.concat(str)); // "Today is a nice day!Today is a niceday!" 
  20.       console.log(str.repeat(2)); // "Today is a nice day!Today is a nice day!" 
  21.       console.log( abc < bcd ); // true 
  22.       console.log( abc .localeCompare( bcd )); // -1 
  23.       console.log( a .localeCompare( A )); // -1 
  24.       console.log( a .localeCompare( A , undefined, { numeric: true })); // -1 
  25.       console.log( a .localeCompare( A , undefined, { sensitivity:  accent  })); // 0 
  26.       console.log( a .localeCompare( A , undefined, { sensitivity:  base  })); // 0 
  27.       console.log( a .localeCompare( A! , undefined, { sensitivity:  base , ignorePunctuation: true })); // 0 
  28.       console.log( abc .toLocaleUpperCase()); // "ABC" 
  29.       console.log(str.padStart(25,  * )); // "*****Todayis a nice day!" 
  30.       console.log(str.padEnd(22,  ! )); // "Today is anice day!!!" 
  31.       console.log(    middle  .trim().length); // 6 
  32.       console.log(    middle  .trimStart().length); // 8 
  33.       console.log(    middle  .trimEnd().length); // 9 
  34.       console.log(str.slice(6, 8)); // "is" 
  35.       console.log(str.slice(-4)); // "day!" 
  36.       console.log(str.substring(6, 8)); // "is" 
  37.       console.log(str.substring(-4)); // "Today is a nice day!" 
  38.       console.log( a .charCodeAt()); // 97 
  39.       console.log(String.fromCharCode(97)); // "a" 
  40.       console.log(str.search(/[a-c]/)); // 3 
  41.       console.log(str.match(/[a-c]/g)); // ["a", "a", "c", "a"] 
  42.       console.log([...str.matchAll(/[a-c]/g)]); 
  43.       // [Array(1), Array(1), Array(1), Array(1)] 
  44.       // 0: ["a", index: 3, input: "Today is a nice day!",groups: undefined] 
  45.       // 1: ["a", index: 9, input: "Today is a nice day!",groups: undefined] 
  46.       // 2: ["c", index: 13, input: "Today is a niceday!", groups: undefined] 
  47.       // 3: ["a", index: 17, input: "Today is a niceday!", groups: undefined] 
  48.       console.log([... test1test2 .matchAll(/t(e)(st(d?))/g)]); 
  49.       // [Array(4), Array(4)] 
  50.       // 0: (4) ["test1", "e", "st1","1", index: 0, input: "test1test2", groups: undefined] 
  51.       // 1: (4) ["test2", "e", "st2","2", index: 5, input: "test1test2", groups: undefined] 
  52.       console.log(str.replace( a ,  z )); // Todzy is anice day! 
  53.       console.log(str.replace(/[a-c]/,  z )); // Todzy is anice day! 
  54.       console.log(str.replace(/[a-c]/g,  z )); // Todzy is znize dzy! 
  55.       console.log(str.replaceAll( a ,  z )); // Todzy is znice dzy! 
  56.       console.log(str.replaceAll(/[a-c]/g,  z )); // Todzy is znize dzy! 
  57.       console.log(str.replaceAll(/[a-c]/,  z )); // TypeError:String.prototype.replaceAll called with a non-global RegExp argument 

映射和集合

對于字符串操作,我們需要在某處存儲中間值。數組、映射和集合都是需要掌握的常用數據結構,本文主要討論集合和映射。

(1) 集合

Set是存儲所有類型的唯一值的對象。以下是供參考的代碼示例,一目了然。

  1. const set =newSet( aabbccdefghi );  
  2.                        console.log(set.size); // 9 
  3.                        console.log(set.has( d )); // true 
  4.                        console.log(set.has( k )); // false 
  5.                        console.log(set.add( k )); // {"a", "b", "c", "d","e" "f", "g", "h", "i","k"} 
  6.                        console.log(set.has( k )); // true 
  7.                        console.log(set.delete( d )); // true 
  8.                        console.log(set.has( d )); // false 
  9.                        console.log(set.keys()); // {"a", "b", "c","e" "f", "g", "h", "i","k"} 
  10.                        console.log(set.values()); // {"a", "b", "c","e" "f", "g", "h", "i","k"} 
  11.                        console.log(set.entries()); // {"a" => "a","b" => "b", "c" => "c","e" => "e", 
  12.                        // "f"=> "f", "g" => "g", "h" =>"h"}, "i" => "i", "k" =>"k"} 
  13.                        const set2 =newSet(); 
  14.                        set.forEach(item => set2.add(item.toLocaleUpperCase())); 
  15.                        set.clear(); 
  16.                        console.log(set); // {} 
  17.                        console.log(set2); //{"A", "B", "C", "E", "F","G", "H", "I", "K"} 
  18.                        console.log(newSet([{ a: 1, b: 2, c: 3 }, { d: 4, e: 5 }, { d: 4, e: 5 }])); 
  19.                        // {{a: 1, b: 2,c: 3}, {d: 4, e: 5}, {d: 4, e: 5}} 
  20.                        const item = { f: 6, g: 7 }; 
  21.                        console.log(newSet([{ a: 1, b: 2, c: 3 }, item, item])); 
  22.                        // {{a: 1, b: 2,c: 3}, {f: 6, g: 7}} 

(2) 映射

映射是保存鍵值對的對象。任何值都可以用作鍵或值。映射會記住鍵的原始插入順序。以下是供參考的代碼示例:

  1. const map =newMap();    
  2.       console.log(map.set(1,  first )); // {1 =>"first"} 
  3.       console.log(map.set( a ,  second )); // {1 =>"first", "a" => "second"} 
  4.       console.log(map.set({ obj:  123  }, [1, 2, 3])); 
  5.       // {1 => "first", "a" =>"second", {obj: "123"} => [1, 2, 3]} 
  6.       console.log(map.set([2, 2, 2], newSet( abc ))); 
  7.       // {1 => "first", "a" => "second",{obj: "123"} => [1, 2, 3], [2, 2, 2] => {"a","b", "c"}} 
  8.       console.log(map.size); // 4 
  9.       console.log(map.has(1)); // true 
  10.       console.log(map.get(1)); // "first" 
  11.       console.log(map.get( a )); // "second" 
  12.       console.log(map.get({ obj:  123  })); // undefined 
  13.       console.log(map.get([2, 2, 2])); // undefined 
  14.       console.log(map.delete(1)); // true 
  15.       console.log(map.has(1)); // false 
  16.       const arr = [3, 3]; 
  17.       map.set(arr, newSet( xyz )); 
  18.       console.log(map.get(arr)); // {"x", "y", "z"} 
  19.       console.log(map.keys()); // {"a", {obj: "123"}, [2, 2,2], [3, 3]} 
  20.       console.log(map.values()); // {"second", [1, 2, 3], {"a","b", "c"}, {"x", "y", "z"}} 
  21.       console.log(map.entries()); 
  22.       // {"a" => "second", {obj: "123"}=> [1, 2, 3], [2, 2, 2] => {"a", "b", "c"},[3, 3] => {"x", "y", "z"}} 
  23.       const map2 =newMap([[ a , 1], [ b , 2], [ c , 3]]); 
  24.       map2.forEach((value, key, map) => console.log(`value = ${value}, key = ${key}, map = ${map.size}`)); 
  25.       // value = 1key = amap = 3 
  26.       // value = 2key = bmap = 3 
  27.       // value = 3key = cmap = 3 
  28.       map2.clear(); 
  29.       console.log(map2.entries()); // {} 

應用題

面試中有英語應用題,我們探索了一些經常用于測試的算法。

(1) 等值線

等值線圖是指所含字母均只出現一次的單詞。

  • dermatoglyphics (15個字母)
  • hydropneumatics (15個字母)
  • misconjugatedly (15個字母)
  • uncopyrightable (15個字母)
  • uncopyrightables (16個字母)
  • subdermatoglyphic (17個字母)

如何寫一個算法來檢測字符串是否是等值線圖?有很多方法可以實現。可以把字符串放在集合中,然后自動拆分成字符。由于集合是存儲唯一值的對象,如果它是一個等值線圖,它的大小應該與字符串長度相同。

  1. /** 
  2.     * An algorithm to verify whethera given string is an isogram 
  3.     * @param {string} str The string to be verified 
  4.     * @return {boolean} Returns whether it is an isogram 
  5.     */ 
  6.    functionisIsogram(str) { 
  7.     if (!str) { 
  8.        returnfalse; 
  9.     } 
  10.     
  11.         const set =newSet(str); 
  12.     return set.size=== str.length; 
  13.    } 

以下是驗證測試:

  1. console.log(isIsogram(  )); // false  
  2.                             console.log(isIsogram( a )); // true 
  3.                             console.log(isIsogram( misconjugatedly )); // true 
  4.                             console.log(isIsogram( misconjugatledly )); // false 

(2) 全字母短句

全字母短句是包含字母表中所有26個字母的句子,不分大小寫。理想情況下,句子越短越好。以下為全字母短句:

  • Waltz, bad nymph, for quick jigs vex. (28個字母)
  • Jived fox nymph grabs quick waltz. (28個字母)
  • Glib jocks quiz nymph to vex dwarf. (28個字母)
  • Sphinx of black quartz, judge my vow. (29個字母)
  • How vexingly quick daft zebras jump! (30個字母)
  • The five boxing wizards jump quickly. (31個字母)
  • Jackdaws love my big sphinx of quartz. (31個字母)
  • Pack my box with five dozen liquor jugs. (32個字母)
  • The quick brown fox jumps over a lazy dog. (33個字母)

還有很多方法可以驗證給定的字符串是否是全字母短句。這一次,我們將每個字母(轉換為小寫)放入映射中。如果映射大小為26,那么它就是全字母短句。

  1. /**    
  2.     * An algorithm to verify whethera given string is a pangram 
  3.     * @param {string} str The string to be verified 
  4.     * @return {boolean} Returns whether it is a pangram 
  5.     */ 
  6.    functionisPangram(str) { 
  7.     const len = str.length; 
  8.     if (len <26) { 
  9.        returnfalse; 
  10.     } 
  11.                const map =newMap(); 
  12.     for (let i =0; i < len; i++) { 
  13.        if (str[i].match(/[a-z]/i)) { // if it is letter a to z, ignoring the case 
  14.          map.set(str[i].toLocaleLowerCase(), true); // use lower case letter as a key 
  15.        } 
  16.     } 
  17.     return map.size===26; 
  18.    } 

以下是驗證測試:

  1. console.log(isPangram(  )); // false  
  2.                             console.log(isPangram( Bawds jog, flick quartz, vex nymphs. )); // true 
  3.                             console.log(isPangram( The quick brown fox jumped over the lazy sleepingdog. )); // true 
  4.                             console.log(isPangram( Roses are red, violets are blue, sugar is sweet,and so are you. )); // false 

(3) 同構字符串

給定兩個字符串s和t,如果可以替換掉s中的字符得到t,那么這兩個字符串是同構的。s中的所有字符轉換都必須應用到s中相同的字符上,例如,murmur與tartar為同構字符串,如果m被t替換,u被a替換,r被自身替換。以下算法使用數組來存儲轉換字符,也適用于映射。

  1. /** 
  2.     * An algorithm to verify whethertwo given strings are isomorphic 
  3.     * @param {string} s The first string 
  4.     * @param {string} t The second string 
  5.     * @return {boolean} Returns whether these two strings are isomorphic 
  6.     */ 
  7.    functionareIsomorphic(s, t) { 
  8.     // strings with different lengths are notisomorphic 
  9.     if (s.length !== t.length) { 
  10.          returnfalse; 
  11.     } 
  12.                // the conversion array 
  13.     const convert = []; 
  14.     for (let i =0; i < s.length; i++) { 
  15.          // if the conversioncharacter exists 
  16.          if (convert[s[i]]) { 
  17.              // apply the conversion and compare 
  18.              if (t[i] === convert[s[i]]) { // so far so good 
  19.                  continue; 
  20.              } 
  21.              returnfalse; // not isomorphic 
  22.          } 
  23.                    // set the conversion character for future use 
  24.          convert[s[i]] = t[i]; 
  25.     } 
  26.                // these two strings are isomorphic since there are no violations 
  27.     returntrue; 
  28.    }; 

以下是驗證測試:

  1. onsole.log(areIsomorphic( atlatl ,  tartar )); // true 
  2.                                     console.log(areIsomorphic( atlatlp ,  tartarq )); // true 
  3.                                     console.log(areIsomorphic( atlatlpb ,  tartarqc )); // true 
  4.                                     console.log(areIsomorphic( atlatlpa ,  tartarqb )); // false 

(4) 相同字母異構詞

相同字母異構詞是通過重新排列不同單詞的字母而形成的單詞,通常使用所有原始字母一次。從一個池中重新排列單詞有很多種可能性。例如,cat的相同字母異構詞有cat、act、atc、tca、atc和tac。我們可以添加額外的要求,即新單詞必須出現在源字符串中。如果源實際上是actually,則結果數組是[“act”]。

  1. /** 
  2.     * Given a pool to compose ananagram, show all anagrams contained (continuously) in the source 
  3.     * @param {string} source A source string to draw an anagram from 
  4.     * @param {string} pool A pool to compose an anagram 
  5.     * @return {array} Returns an array of anagrams that are contained by the source string 
  6.     */ 
  7.    functionshowAnagrams(source, pool) { 
  8.     // if source is not long enough to hold theanagram 
  9.     if (source.length< pool.length) { 
  10.        return []; 
  11.     } 
  12.                const sourceCounts = []; // an array tohold the letter counts in source 
  13.     const poolCounts = []; // an array tohold the letter counts in pool 
  14.                // initialize counts for 26 letters to be 0 
  15.     for (let i =0; i <26; i++) { 
  16.        sourceCounts[i] =0; 
  17.        poolCounts[i] =0; 
  18.     } 
  19.                // convert both strings to lower cases 
  20.     poolpool = pool.toLocaleLowerCase(); 
  21.     const lowerSource = source.toLocaleLowerCase(); 
  22.                for (let i =0; i < pool.length; i++) { 
  23.         // calculatepoolCounts for each letter in pool, mapping a - z to 0 - 25 
  24.        poolCounts[pool[i].charCodeAt() -97]++; 
  25.     } 
  26.                const result = []; 
  27.     for (let i =0; i < lowerSource.length; i++) { 
  28.        // calculatesourceCounts for each letter for source, mapping a - z to 0 - 25 
  29.        sourceCounts[lowerSource[i].charCodeAt() -97]++; 
  30.        if (i >= pool.length-1) { // if source islong enough 
  31.          // if sourceCountsis the same as poolCounts 
  32.          if (JSON.stringify(sourceCounts) ===JSON.stringify(poolCounts)) { 
  33.            // save the found anagram, using the original source to make stringcase-preserved 
  34.            result.push(source.slice(i - pool.length+1, i +1)); 
  35.          } 
  36.          // shift thestarting window by 1 index (drop the current first letter) 
  37.          sourceCounts[lowerSource[i - pool.length+1].charCodeAt() -97]--; 
  38.        } 
  39.     } 
  40.           // removeduplicates by a Set 
  41.     return [...newSet(result)]; 
  42.    } 

以下是驗證測試:

  1. console.log(showAnagrams( AaaAAaaAAaa ,  aa )); // ["Aa", "aa", "aA", "AA"] 
  2.                                         console.log(showAnagrams( CbatobaTbacBoat ,  Boat ));  //["bato", "atob", "toba", "obaT","Boat"] 
  3.                                         console.log(showAnagrams( AyaKkayakkAabkk ,  Kayak )); 
  4.                                         // ["AyaKk", "yaKka", "aKkay", "Kkaya","kayak", "ayakk", "yakkA"] 

(5) 回文

回文是從前往后讀和從后往前讀讀法相同的單詞或句子。有很多回文,比如A,Bob,還有 “A man, a plan, a canal — Panama”。檢查回文的算法分為兩種。使用循環或使用遞歸從兩端檢查是否相同。下列代碼使用遞歸方法:

  1. /** 
  2.     * An algorithm to verify whethera given string is a palindrome 
  3.     * @param {string} str The string to be verified 
  4.     * @return {boolean} Returns whether it is a palindrome 
  5.     */ 
  6.    functionisPalindrome(str) { 
  7.     functioncheckIsPalindrome(s) { 
  8.        // empty stringor one letter is a defecto palindrome 
  9.        if (s.length<2) { 
  10.          returntrue; 
  11.        } 
  12.                  if ( // if two ends notequal, ignoring the case 
  13.          s[0].localeCompare(s[s.length-1], undefined, { 
  14.            sensitivity:  base , 
  15.          }) !== 0 
  16.        ) { 
  17.          returnfalse; 
  18.        } 
  19.                  // since two ends equal, checking the inside 
  20.        returncheckIsPalindrome(s.slice(1, -1)); 
  21.     } 
  22.      
  23.     // check whether it is a palindrome, removing noneletters and digits 
  24.     returncheckIsPalindrome(str.replace(/[^A-Za-z0-9]/g,   )); 
  25.    } 

以下是驗證測試:

  1. console.log(isPalindrome(  )); // true 
  2.                                console.log(isPalindrome( a )); // true 
  3.                                console.log(isPalindrome( Aa )); // true 
  4.                                console.log(isPalindrome( Bob )); // true 
  5.                                console.log(isPalindrome( Odd or even )); // false 
  6.                                console.log(isPalindrome( Never odd or even )); // true 
  7.                                console.log(isPalindrome( 02/02/2020 )); // true 
  8.                                console.log(isPalindrome( 2/20/2020 )); // false 
  9.                                console.log(isPalindrome( A man, a plan, a canal – Panama )); // true 

回文面試題有很多不同的變形題,下面是一個在給定字符串中尋找最長回文的算法。

  1. /**                                        
  2.     * An algorithm to find thelongest palindrome in a given string 
  3.     * @param {string} source The source to find the longest palindrome from 
  4.     * @return {string} Returns the longest palindrome 
  5.     */ 
  6.    functionfindLongestPalindrome(source) { 
  7.     // convert to lower cases and only keep lettersand digits 
  8.     constlettersAndDigits = source.replace(/[^A-Za-z0-9]/g,   ); 
  9.     const str = lettersAndDigits.toLocaleLowerCase(); 
  10.                const len = str.length; 
  11.               // empty string or one letter is a defecto palindrome 
  12.     if (len <2) { 
  13.        return str; 
  14.     } 
  15.                // the first letter is the current longest palindrome 
  16.     let maxPalindrome = lettersAndDigits[0]; 
  17.                // assume that the index is the middle of a palindrome 
  18.     for (let i =0; i < len; i++) { 
  19.                  // try the case that the palindrome has one middle 
  20.        for ( 
  21.          let j =1; // start with onestep away (inclusive) 
  22.          j < len &&// end with the len end (exclusive) 
  23.          i - j >= 0&&// cannot pass the start index (inclusive) 
  24.          i + j < len &&// cannot exceed end index (exclusive) 
  25.          Math.min(2 * i +1, 2 * (len - i) -1) > maxPalindrome.length; // potential max length should be longer than thecurrent length 
  26.          j++ 
  27.        ) { 
  28.          if (str[i - j] !== str[i + j]) { // if j stepsbefore the middle is different from j steps after the middle 
  29.            break; 
  30.          } 
  31.          if (2 * j +1> maxPalindrome.length) { // if it is longerthan the current length 
  32.            maxPalindrome = lettersAndDigits.slice(i - j, i + j +1); // j steps before, middle, and j steps after 
  33.          } 
  34.        } 
  35.                  // try the case that the palindrome has two middles 
  36.        if (i < len -1&& str[i] === str[i +1]) { // if two middles are the same 
  37.          if (maxPalindrome.length<2) { // the string withtwo middles could be the current longest palindrome 
  38.            maxPalindrome = lettersAndDigits.slice(i, i +2); 
  39.          } 
  40.          for ( 
  41.            let j =1; // start with one step away (inclusive) 
  42.            j < len -1&&// end with the len - 1 end (exclusive) 
  43.            i - j >= 0&&// cannot pass the start index (inclusive) 
  44.            i + j +1< len &&// cannot exceed end index (exclusive) 
  45.            Math.min(2 * i +2, 2 * (len - i)) > maxPalindrome.length; // potential max length should be longer than thecurrent length 
  46.            j++ 
  47.          ) { 
  48.            if (str[i - j] !== str[i + j +1]) { // if j stepsbefore the left middle is different from j steps after the right middle 
  49.              break; 
  50.            } 
  51.            if (2 * j +2> maxPalindrome.length) { // if it is longer than the current length 
  52.              maxPalindrome = lettersAndDigits.slice(i - j, i + j +2); // j steps before, middles, and j steps after 
  53.            } 
  54.          } 
  55.        } 
  56.     } 
  57.     return maxPalindrome; 
  58.    }             

以下是驗證測試:

  1. console.log(findLongestPalindrome(  )); // ""  
  2.                                         console.log(findLongestPalindrome( abc )); // "a" 
  3.                                         console.log(findLongestPalindrome( Aabcd )); // "Aa" 
  4.                                         console.log(findLongestPalindrome( I am Bob. )); // "Bob" 
  5.                                         console.log(findLongestPalindrome( Odd or even )); // "Oddo" 
  6.                                         console.log(findLongestPalindrome( Never odd or even )); // "Neveroddoreven" 
  7.                                         console.log(findLongestPalindrome( Today is 02/02/2020. )); // "02022020" 
  8.                                         console.log(findLongestPalindrome( It is 2/20/2020. )); // "20202" 
  9.                                         console.log(findLongestPalindrome( A man, a plan, a canal – Panama )); // "AmanaplanacanalPanama" 

熟能生巧。享受編碼!

 

責任編輯:趙寧寧 來源: 讀芯術
相關推薦

2020-10-20 14:50:26

Python數字字符串

2019-06-17 10:01:10

SAN網絡運維

2020-09-21 14:35:00

算法圖表視覺化

2020-11-12 09:14:25

JAVA.IO、字符編

2020-01-30 10:30:32

AI 數據人工智能

2018-03-16 14:24:24

人工智能機器學習神經網絡

2021-01-04 14:59:50

AIAI技術機器學習

2020-01-07 14:24:18

人工智能機器學習技術

2024-04-23 14:02:48

Python數據類型字符串

2009-08-06 16:01:09

C#字符串函數大全

2010-07-14 16:35:52

Perl字符串處理函數

2010-11-08 17:07:41

SQL Server字

2020-03-03 17:47:07

UDP TCP面試題

2024-09-19 09:12:50

RAG系統技術

2023-09-26 00:29:40

CSS布局標簽

2021-03-05 09:10:19

base64編碼

2012-10-24 10:15:22

開放式一站式數據中心

2024-08-05 13:00:00

2018-03-21 12:36:21

Python字符串

2024-03-28 10:08:31

自動駕駛工具
點贊
收藏

51CTO技術棧公眾號

国产专区精品| 在线观看小视频| 麻豆一区二区三| 久久这里只有精品99| 美女久久久久久久久| 伊人久久综合一区二区| 亚洲欧美在线观看| 国产精品一区二区在线观看| 黄色片视频免费| 这里只有精品在线| 亚洲欧美日韩在线一区| 杨幂一区二区国产精品| 久久电影tv| 亚洲一线二线三线视频| 日韩伦理一区二区三区av在线| 日韩av成人网| 欧美亚洲韩国| 亚洲一区二区中文在线| 欧美日韩在线精品| www.麻豆av| 美国av一区二区| 2019精品视频| 九九视频免费看| 色婷婷色综合| 亚洲精选一区二区| 乳色吐息在线观看| 国产极品嫩模在线观看91精品| 久久久99精品久久| 国产传媒一区二区| 影音先锋国产资源| 久久国产99| 久久久久免费视频| 中文字幕人妻一区二| 欧洲grand老妇人| 亚洲成av人影院在线观看| 日本中文字幕二区| 国产精品无码久久久久| 欧美性xxxxx极品| 超碰成人免费在线| 中文国产字幕在线观看| 国产精品久久夜| 欧美亚洲爱爱另类综合| 欧美一级免费片| 国产成人av电影| 成人黄色片视频网站| 国产露脸91国语对白| 麻豆精品新av中文字幕| 国产精品精品一区二区三区午夜版| 又色又爽的视频| 国产精品一区二区av日韩在线| 欧美三级视频在线播放| 一本大道熟女人妻中文字幕在线| av网站在线免费观看| 久久在线免费观看| 久久久久九九九| 日韩欧美在线观看一区二区| 成人黄色综合网站| 久99久在线| 深夜福利在线看| 99国内精品久久| 久久伊人资源站| 欧美美女搞黄| 日本一区免费视频| 日韩欧美在线观看强乱免费| 成年人视频在线看| 国产精品久久久久久久久图文区| 福利视频一区二区三区| 亚洲国产www| 成人午夜在线播放| 国模精品一区二区三区| 你懂的在线观看视频网站| 久久久国产精华| 色女人综合av| 看女生喷水的网站在线观看| 亚洲靠逼com| 极品粉嫩国产18尤物| 日本不良网站在线观看| 在线观看91视频| 免费在线观看污网站| 亚洲码欧美码一区二区三区| 亚洲第一av网站| 黄免费在线观看| 视频在线不卡免费观看| 欧美成年人视频| 男女视频免费看| 久久九九免费| 成人做爽爽免费视频| 亚洲国产成人一区二区| 久久久不卡影院| 男女啪啪免费观看| 美女av在线免费看| 欧美日韩精品综合在线| 亚洲午夜精品在线观看| 免费短视频成人日韩| 色伦专区97中文字幕| 国产在线观看成人| 日本欧美一区二区| 国产精品成人观看视频免费| 国产在线一二三区| 一个色在线综合| 无码内射中文字幕岛国片| 亚洲国产欧美在线观看| 国产亚洲精品美女久久久久| 欧美三级在线免费观看| 久久久一二三| 亚洲aⅴ男人的天堂在线观看| 夜夜爽8888| 99视频精品在线| 亚洲午夜精品久久| 91黄页在线观看| 欧美精品在线一区二区| 女~淫辱の触手3d动漫| 欧美1级日本1级| 国产精品成人一区二区三区吃奶| 国产一级淫片a视频免费观看| 国产手机视频一区二区| 91在线国产电影| 国产视频网址在线| 婷婷久久综合九色综合绿巨人 | 亚洲日本在线视频观看| 免费看日本毛片| 国产视频一区二| 中文字幕亚洲欧美一区二区三区| 精品手机在线视频| 国产精品夜夜夜| 国产精品午夜av在线| 自拍视频在线网| 日韩欧美国产激情| 国产精品亚洲一区二区无码| 97精品国产福利一区二区三区| 久久国产一区二区三区| 久久久久久亚洲av无码专区| 成人精品在线视频观看| 成人手机在线播放| 成人国产精品久久| 日韩在线观看免费全集电视剧网站 | 91动漫在线看| 国产精品99久久免费| 中文字幕最新精品| 波多野结衣黄色| www国产亚洲精品久久麻豆| 欧美日韩不卡在线视频| 亚洲国产中文在线| 欧美精品一二区| 国产又粗又猛又爽| 国产精品护士白丝一区av| 国产真人无码作爱视频免费| 神马影视一区二区| 国产成人激情小视频| 精品999视频| 色综合久久99| 国产又黄又粗视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲自拍偷拍网址| 精品176二区| 日韩视频一区在线观看| 精国产品一区二区三区a片| 国产一区美女在线| 久久福利一区二区| 999久久久精品一区二区| 欧美肥婆姓交大片| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 国产精品毛片高清在线完整版| 免费人成自慰网站| 91久久偷偷做嫩草影院电| 欧美成年人视频网站欧美| 亚洲精品久久久蜜桃动漫| 亚洲一区二区三区四区五区中文 | 亚洲女人天堂网| √资源天堂中文在线| 久久精品一区蜜桃臀影院| 欧美日韩怡红院| 91偷拍一区二区三区精品| 亚洲精品日韩激情在线电影| av中文字幕在线播放| 亚洲成人av在线| 伊人久久中文字幕| 亚洲日本欧美天堂| 国产精品一区二区人妻喷水| 首页综合国产亚洲丝袜| 亚洲人成网站在线播放2019| 欧美一级片网址| 国外成人免费在线播放| 国产精品一二三区视频| 91精品在线一区二区| 国产一级在线观看视频| 国产亚洲自拍一区| 91插插插影院| 国产日韩欧美三区| 亚洲自拍偷拍二区| 精品视频高潮| 国产区精品视频| av免费不卡| 久久精品国产69国产精品亚洲| 做爰无遮挡三级| 一区二区高清视频在线观看| 久久精品一区二区免费播放| 激情国产一区二区| 美女av免费在线观看| 我不卡影院28| 久久资源亚洲| 欧美欧美在线| 国产精品免费一区| 高清电影在线免费观看| 国产午夜精品一区二区三区| 精品久久久久中文慕人妻| 色女孩综合影院| 国产一级做a爰片在线看免费| 国产成a人亚洲精| 奇米影音第四色| 在线一区免费观看| 无码人妻精品一区二区三区99v| 99er精品视频| 欧美中文字幕视频在线观看| 亚洲淫性视频| 中文字幕亚洲情99在线| 天堂成人在线| 精品日韩一区二区三区免费视频| 中文在线观看免费网站| 国产精品女人毛片| 亚洲综合网在线观看| 豆国产96在线|亚洲| 日韩成人精品视频在线观看| 老**午夜毛片一区二区三区| 国产精品又粗又长| 欧美一区久久| 宅男噜噜99国产精品观看免费| 精品午夜视频| 国产日韩一区在线| 性欧美freehd18| 69**夜色精品国产69乱| 波多野结衣乳巨码无在线观看| 亚洲精品按摩视频| aaa国产视频| 7777精品伊人久久久大香线蕉经典版下载 | 色鬼7777久久| 亚洲国产一区自拍| 丁香六月色婷婷| 日韩小视频在线观看专区| 国产又黄又大又粗的视频| 色狠狠一区二区三区香蕉| 久久亚洲精品国产| 红桃视频成人在线观看| 日韩av一二三区| 午夜视频一区二区三区| 精品无码人妻一区二区三区品| 久久久国产一区二区三区四区小说| 色播五月激情五月| 久久99深爱久久99精品| 欧美第一页浮力影院| 麻豆久久一区二区| 成人性生交视频免费观看| 国产一区二区影院| www.欧美com| 成人av在线播放网址| 日韩免费高清一区二区| 2024国产精品视频| 免费看污片网站| 亚洲国产岛国毛片在线| 久草福利资源在线| 亚洲欧洲在线观看av| 少妇aaaaa| 亚洲图片欧美综合| 欧美在线观看不卡| 91激情五月电影| 亚洲一级黄色大片| 日韩一区二区高清| 手机在线精品视频| 亚洲一级片在线看| 久cao在线| 国语自产在线不卡| 浪潮色综合久久天堂| 成人天堂噜噜噜| 澳门成人av| 日本午夜一区二区三区| 久久在线视频| 丝袜人妻一区二区三区| 久久久久免费| 欧美一级特黄aaa| 成人美女视频在线观看18| 无码熟妇人妻av| 中文字幕一区二区日韩精品绯色| 国产又大又粗又爽的毛片| 国产精品无遮挡| 久久久久久蜜桃| 日本精品一区二区三区高清 | 91九色在线免费视频| 粉嫩av一区二区| 手机成人在线| 欧美一区亚洲| 国产麻花豆剧传媒精品mv在线| 99av国产精品欲麻豆| 黄色a级片免费| 国产在线观看一区二区| 欧美精品黑人猛交高潮| 国产精品国产三级国产普通话蜜臀 | 99热成人精品热久久66| 精品亚洲欧美一区| 亚洲调教欧美在线| 亚洲欧洲性图库| 国产成人在线观看网站| 91精品啪在线观看国产60岁| 色就是色亚洲色图| 欧美激情xxxxx| 成人国产精品一区二区免费麻豆| 国产成人鲁鲁免费视频a| 成人51免费| 欧美在线视频二区| 韩日欧美一区| 手机av在线免费| 久久久久亚洲综合| 国产一级特黄毛片| 8x8x8国产精品| yiren22亚洲综合伊人22| 午夜精品久久久久久久白皮肤| 极品视频在线| 亚洲free性xxxx护士hd| 欧美综合一区| 国产一级爱c视频| 国产精选一区二区三区| 手机av在线不卡| 日韩欧美精品在线观看| 亚洲精品成人电影| 久久久999国产精品| 视频精品导航| 日韩国产伦理| 久久国产一二区| a视频免费观看| 亚洲午夜激情av| www.av在线.com| 不卡av电影院| www.久久热| 亚洲一区美女| 蜜桃av噜噜一区二区三区小说| 韩国三级与黑人| 亚洲色图第一区| 一区二区三区午夜| 色噜噜狠狠狠综合曰曰曰| 快播电影网址老女人久久| 六月婷婷久久| 久久国产毛片| 黄色片网站免费| 色先锋资源久久综合| 欧美扣逼视频| 国产成人午夜视频网址| 亚洲最好看的视频| 国产欧美在线一区| 久久久精品蜜桃| 波多野结衣视频在线看| 在线性视频日韩欧美| 成人毛片免费| 少妇高潮流白浆| 国产精品一级在线| 久久99久久久| 亚洲国产成人久久综合| 麻豆mv在线观看| 久久综合福利| 欧美bbbbb| 欧洲美女女同性互添| 欧美一级高清片| 91九色在线看| 日本一区二区精品视频| 免费av网站大全久久| 日本高清不卡免费| 日韩精品在线一区| h片在线观看| 欧美午夜欧美| 黄一区二区三区| 久久综合加勒比| 精品偷拍各种wc美女嘘嘘| 亚洲一区二区三区四区| 一区二区三区四区欧美| 国产99一区视频免费| 男女视频免费看| 自拍视频国产精品| 中文在线综合| 超碰97人人射妻| 中文字幕一区二| 亚洲av无码乱码在线观看性色| 色偷偷噜噜噜亚洲男人| 日韩中文在线| 成年人免费大片| 亚洲天堂2016| 亚洲 国产 欧美 日韩| 国产精品爽爽爽爽爽爽在线观看| 亚洲精品国产精品粉嫩| 成人免费在线观看视频网站| 一二三四区精品视频| 男女污污视频在线观看| 91在线直播亚洲| 午夜在线视频观看日韩17c| 亚洲综合欧美综合| 精品国产乱码久久久久久闺蜜 | 国产国产精品| 东京热av一区| 欧美男女性生活在线直播观看 | 欧美激情精品久久久久久黑人| 青青久久精品| 成人中文字幕在线播放| 中文字幕制服丝袜一区二区三区 |