摘要:說明本題中,我們將空字符串定義為有效的回文串。說明當是空字符串時,我們應當返回什么值呢這是一個在面試中很好的問題。對于本題而言,當是空字符串時我們應當返回。注意整數順序將表示為一個字符串。如果不存在公共前綴,返回空字符串。
鍛煉自己的能力,讓自己更加熟悉各個api的使用。
下面是javascript版本的leetcode題目(字符串入門題組)解法。leetCode地址。
編寫一個函數,其作用是將輸入的字符串反轉過來。
示例 示例1:輸入: "hello" 輸出: "olleh"示例 2:
輸入: "A man, a plan, a canal: Panama" 輸出: "amanaP :lanac a ,nalp a ,nam A"實現
/** * @param {string} s * @return {string} */ var reverseString = function(s) { return s.split("").reverse().join("") };點評
常見寫法,轉為數組,翻轉,變回來。
2.顛倒整數 說明給定一個 32 位有符號整數,將整數中的數字進行反轉。
注意:
假設我們的環境只能存儲 32 位有符號整數,其數值范圍是 [?231, 231 ? 1]。根據這個假設,如果反轉后的整數溢出,則返回 0。
輸入: 123 輸出: 321示例 2:
輸入: -123 輸出: -321示例 3:
輸入: 120 輸出: 21實現
/** * @param {number} x * @return {number} */ var _min = Math.pow(-2,31) var _max = Math.pow(2,31) var reverse = function(x) { var _num = null; if(x<0){ _num = Number("-"+(Math.abs(x)+"").split("").reverse().join("")) }else{ _num = Number(((x)+"").split("").reverse().join("")) } if(_num>_max || _num<_min){ return 0; }else{ return _num } };點評
看上去和第一題沒什么區別。轉為字符串,翻轉,變成數值。里面需要處理的就是越界以及正負數的問題
3.字符串中的第一個唯一字符 說明給定一個字符串,找到它的第一個不重復的字符,并返回它的索引。如果不存在,則返回 -1。
注意:
您可以假定該字符串只包含小寫字母。
s = "leetcode" 返回 0.示例2:
s = "loveleetcode", 返回 2.實現
/** * @param {string} s * @return {number} */ var firstUniqChar = function(s) { for(var i = 0 ; i < s.length;i++){ if(s.indexOf(s[i]) == s.lastIndexOf(s[i])){ return i } } return -1 };點評
解法不是很好,會導致遍歷很多次,想法就是前后找,如果index一致就證明沒重復
最快的方法當然是把當前的存在map里面,然后計數,再遍歷一遍map就ok。
給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的一個字母異位詞。
說明:
你可以假設字符串只包含小寫字母。
進階:
如果輸入字符串包含 unicode 字符怎么辦?你能否調整你的解法來應對這種情況?
輸入: s = "anagram", t = "nagaram" 輸出: true示例 2:
輸入: s = "rat", t = "car" 輸出: false實現
/** * @param {string} s * @param {string} t * @return {boolean} */ var isAnagram = function(s, t) { var _sArr = {}; var _tArr = {}; if(s.length != t.length) return false; for(var i = 0;i點評 這個就是通過計數,然后判斷是否元素都一樣多。
5.驗證回文字符串 說明給定一個字符串,驗證它是否是回文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:
示例 示例 1:
本題中,我們將空字符串定義為有效的回文串。輸入: "A man, a plan, a canal: Panama" 輸出: true示例 2:輸入: "race a car" 輸出: false實現/** * @param {string} s * @return {boolean} */ var isPalindrome = function(s) { var _s = s.replace(/[^a-z0-9]/gi,"").toLowerCase(); return _s.split("").reverse().join("") == _s };點評通過正則把不要的字符都刪掉,轉化為小寫,翻轉比對。
6.字符串轉整數(atoi) 說明實現 atoi,將字符串轉為整數。
在找到第一個非空字符之前,需要移除掉字符串中的空格字符。如果第一個非空字符是正號或負號,選取該符號,并將其與后面盡可能多的連續的數字組合起來,這部分字符即為整數的值。如果第一個非空字符是數字,則直接將其與之后連續的數字字符組合起來,形成整數。
字符串可以在形成整數的字符后面包括多余的字符,這些字符可以被忽略,它們對于函數沒有影響。
當字符串中的第一個非空字符序列不是個有效的整數;或字符串為空;或字符串僅包含空白字符時,則不進行轉換。
若函數不能執行有效的轉換,返回 0。
說明:
示例 示例 1:
假設我們的環境只能存儲 32 位有符號整數,其數值范圍是 [?231, 231 ? 1]。如果數值超過可表示的范圍,則返回 INT_MAX (231 ? 1) 或 INT_MIN (?231) 。輸入: "42" 輸出: 42示例 2:輸入: " -42" 輸出: -42 解釋: 第一個非空白字符為 "-", 它是一個負號。 我們盡可能將負號與后面所有連續出現的數字組合起來,最后得到 -42 。示例 3:輸入: "4193 with words" 輸出: 4193 解釋: 轉換截止于數字 "3" ,因為它的下一個字符不為數字。示例 4:輸入: "words and 987" 輸出: 0 解釋: 第一個非空字符是 "w", 但它不是數字或正、負號。 因此無法執行有效的轉換。示例 5輸入: "-91283472332" 輸出: -2147483648 解釋: 數字 "-91283472332" 超過 32 位有符號整數范圍。 因此返回 INT_MIN (?231) 。實現/** * @param {string} str * @return {number} */ var myAtoi = function(str) { var _num = parseInt(str) || 0 if(_num < (Math.pow(-2,31))){ return (Math.pow(-2,31)) }else if(_num >= (Math.pow(2,31))){ return (Math.pow(2,31)-1) }else{ return _num } };點評這個沒什么好說的,判斷邊界,然后parseInt
7.實現strStr() 說明給定一個 haystack 字符串和一個 needle 字符串,在 haystack 字符串中找出 needle 字符串出現的第一個位置 (從0開始)。如果不存在,則返回 -1。
說明:
示例 示例 1:
當 needle 是空字符串時,我們應當返回什么值呢?這是一個在面試中很好的問題。
對于本題而言,當 needle 是空字符串時我們應當返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。輸入: haystack = "hello", needle = "ll" 輸出: 2示例 2:輸入: haystack = "aaaaa", needle = "bba" 輸出: -1實現/** * @param {string} haystack * @param {string} needle * @return {number} */ var strStr = function(haystack, needle) { return haystack.indexOf(needle) };點評也沒什么說的吧,正則或者indexOf都可以實現
8.數數并說 說明報數序列是指一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下:
1. 1 2. 11 3. 21 4. 1211 5. 1112211 被讀作 "one 1" ("一個一") , 即 11。
11 被讀作 "two 1s" ("兩個一"), 即 21。
21 被讀作 "one 2", "one 1" ("一個二" , "一個一") , 即 1211。給定一個正整數 n ,輸出報數序列的第 n 項。
示例 示例 1:
注意:整數順序將表示為一個字符串。輸入: 1 輸出: "1"示例 2:輸入: 4 輸出: "1211"實現/** * @param {number} n * @return {string} */ var countAndSay = function(n) { var _str = "1"; for(var i=1;i點評""+v.length+v[0]).join(""); } return _str }; 我的想法是選出連續的同字符,然后把該字符串變成長度加字符,再拼回去
9. 最長公共前綴 說明編寫一個函數來查找字符串數組中的最長公共前綴。
如果不存在公共前綴,返回空字符串 ""。說明:
示例 示例 1:
所有輸入只包含小寫字母 a-z 。輸入: ["flower","flow","flight"] 輸出: "fl"示例 2:輸入: ["dog","racecar","car"] 輸出: "" 解釋: 輸入不存在公共前綴。實現/** * @param {string[]} strs * @return {string} */ var longestCommonPrefix = function(strs) { var _arr = (strs[0]||"").split("").map((v,i)=>strs[0].slice(0,i+1)).reverse(); for(var i = 1;i點評 想法是做一個公共前綴數組,遍歷,如果有不滿足的,就操作這個前綴數組,直到最后,剩下的就是滿足的。取最大的一個。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97535.html
摘要:第五題對稱二叉樹難度簡單給定一個二叉樹,檢查它是否是鏡像對稱的。第十六題最大連續的個數難度簡單給定一個二進制數組,計算其中最大連續的個數。第十八題平方數之和難度簡單給定一個非負整數,你要判斷是否存在兩個整數和,使得。 寫在前面 最近忙著調教新裝備,沒有及時的寫題解,但是沒有在偷懶沒刷題喔~來認真整理下最近做的題目~ 之前考慮按tag來刷題,后來收到了推薦的leetcode題解,就根據上...
摘要:題解首先,容易觀察到將轉到,,,,狀態,并將進行與上相同操作后得到了再將轉至,,,,所需要的步數即為答案。 E.Edward Gaming, the Champio...
摘要:微信公眾號記錄截圖記錄截圖目前關于這塊算法與數據結構的安排前。已攻略返回目錄目前已攻略篇文章。會根據題解以及留言內容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。本許可協議授權之外的使用權限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...
摘要:題目鏈接題目分析給定兩個字符串,其中一個字符串比另一個字符串在隨機位置多一個字符。思路用計算字符串中字符出現的次數,對比兩個字符串的字符出現次數。計算差集,返回差異部分即可。最終代碼若覺得本文章對你有用,歡迎用愛發電資助。 D73 389. Find the Difference 題目鏈接 389. Find the Difference 題目分析 給定兩個字符串,其中一個字符串比另一...
摘要:由于是按難易度排序的,因此本題是第一題。先把問題簡化為中只有一個字符的情形,因為字符串可以看作是一個字符數組。這個函數的作用就是,根據閉包函數,過濾數組元素。要注意是字符串,需要先轉換成數組才行。 771. Jewels and Stones 由于是按難易度排序的,因此本題是第一題。 題目鏈接 771. Jewels and Stones 題目分析 從第二個參數S中找第一個參數J 中出...
閱讀 423·2019-08-29 12:44
閱讀 3001·2019-08-26 17:49
閱讀 2398·2019-08-26 13:40
閱讀 1180·2019-08-26 13:39
閱讀 3656·2019-08-26 11:59
閱讀 1814·2019-08-26 10:59
閱讀 2454·2019-08-23 18:33
閱讀 2687·2019-08-23 18:30