<String>逆序問題344往果、541疆液、557一铅、917、345

之前寫過關(guān)于逆序問題的JAVA版總結(jié)堕油。因?yàn)楝F(xiàn)在開始搞前端了潘飘,所以用JS又做了一遍這些題目。改變語(yǔ)言之后雖然很多思路都差不多但是一些常用的函數(shù)還是需要整理一下的掉缺。

常見的解法思路:

  • 雙指針方式卜录。利用var arr = s.split('')得到一個(gè)字符數(shù)組,然后利用雙指針?biāo)悸愤M(jìn)行操作眶明。最后使用arr.join('')得到操作后的字符串艰毒。
  • 利用棧進(jìn)行操作。js中用數(shù)組來實(shí)現(xiàn)棧的操作搜囱。

344. Reverse String

解法一:逆序連接字符串

可以像訪問數(shù)組一樣通過索引值訪問字符串里面不同位置的字符丑瞧。

var reverseString = function(s) {
    var reversestring = " ";
    for(var i = s.length-1; i >= 0 ; i--){
        reversestring += s[i];
    }
    return reversestring;
};

解法二:雙指針方式

var reverseString = (s) => {
    var arr = s.split('');
    var i = 0, j = arr.length-1;
    while(i<j){
        [arr[i], arr[j]] = [arr[j],arr[i]];
        i++;
        j--;
    }
    return arr.join('');
};

這里使用了ES6的語(yǔ)法,因?yàn)樵贓S6中對(duì)兩個(gè)字符進(jìn)行交換寫法更為簡(jiǎn)單蜀肘。

解法三:使用棧

在js中可以用數(shù)組實(shí)現(xiàn)棧

var reverseString = (s) => {
    var reversestr = '';
    var stack = [];//用數(shù)組實(shí)現(xiàn)棧
    for(var i = 0;i < s.length; i++){
        stack.push(s[i]);
    }
    while(stack.length!==0){
        reversestr += stack.pop();
    }
    return reversestr;
};

541. Reverse String II


這道題和單純的求逆區(qū)別不大绊汹,需要在外面再加一層循環(huán),確定要進(jìn)行逆序的范圍
雙指針

var reverseStr = function(s, k) {
    var arr = s.split('');
    for(var i = 0; i < s.length; i+=2*k){
        reverse(arr, i, Math.min(i+k-1, s.length-1));
    }
    return arr.join('');
};

var reverse = function(arr, i, j){
    while(i < j){
        var temp = arr[i];
        arr[i++] = arr[j];
        arr[j--]= temp;
    }
};

557. Reverse Words in a String III

image.png

這道題也是需要多一步操作扮宠,就是先利用split函數(shù)將句子中的單詞取出來西乖,對(duì)單詞進(jìn)行求逆。

var reverseWords = function(s) {
    var words = s.split(' ');
    for(var i = 0; i < words.length; i++){
        words[i] = reverse(words[i]);
    }
    return words.join(' ');
};

var reverse = function(s){
    var reversestr = '';
    for(var i = s.length-1; i >= 0 ; i--){
        reversestr += s[i];
    }
    return reversestr;
}

917. Reverse Only Letters

image.png

解法一:

先把字符取出來放在數(shù)組中,逆序获雕,然后再放回去鏈接陳字符串薄腻。在鏈接過程中判斷是否需要插入非字母的字符。

var reverseOnlyLetters = function(S) {
    if(S.match(/[a-zA-Z]/g) === null) return S;
    let arrLetters = S.match(/[a-zA-Z]/g).reverse();
    for(var i in S) {
        if(!/[a-zA-Z]/.test(S[i])) { arrLetters.splice(i,0,S[i]); }
    }
    return arrLetters.join('');    
};

解法二:雙指針

var reverseOnlyLetters = function(S) {
    var arr = S.split('');
    var i = 0;
    var j = arr.length-1;
    while(i<j){
        while(i<j && !/[a-zA-Z]/.test(arr[i])){
            i++
        }
        while(i<j && !/[a-zA-Z]/.test(arr[j])){
            j--;
        }
        var temp = arr[i];
        arr[i++] = arr[j];
        arr[j--] =temp;
    }
    return arr.join('');
};

解法三:利用棧

思路:如果沒有其他字符届案,那么該問題就是最簡(jiǎn)單的逆序問題被廓。將字符壓入棧中,然后在從前往后遍歷一次字符串萝玷,如果原字符串的位置為字符嫁乘,那么從棧里彈出一個(gè)字符放入。

var reverseOnlyLetters = function(S) {
    var stack = [];
    for(var i in S){
        if(/[a-zA-Z]/.test(S[i]))
            stack.push(S[i]);
    }
    
    var str ='';
    for(var i in S){
        if(/[a-zA-Z]/.test(S[i]))
            str +=stack.pop();
        else
            str += S[i];
    }
    
    return str;
};

345. Reverse Vowels of a String

image.png

解法一:雙指針

var reverseVowels = function(s) {
    var arr = s.split('');
    var vowels = 'aeiouAEIOU';
    var i = 0;
    var j = arr.length-1;
    while(i<j){
        while(i<j && vowels.indexOf(arr[i]) < 0){
            i++;
        }
        while(i<j && vowels.indexOf(arr[j]) < 0){
            j--;
        }
        var temp = arr[i];
        arr[i++] = arr[j];
        arr[j--] =temp;
    }
    return arr.join('');
};

解法二:利用棧

var reverseVowels = function(s) {
    var vowels = 'aeiouAEIOU';
    var stack = [];
    for(var i in s){
        if(vowels.indexOf(s[i]) > -1)
            stack.push(s[i]);
    }
    
    var str ='';
    for(var i in s){
        if(vowels.indexOf(s[i]) > -1){
            str +=stack.pop();
        }
            
        else
            str += s[i];
    }
     return str;
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末球碉,一起剝皮案震驚了整個(gè)濱河市蜓斧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睁冬,老刑警劉巖挎春,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異豆拨,居然都是意外死亡直奋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門施禾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脚线,“玉大人,你說我怎么就攤上這事弥搞∮事蹋” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵攀例,是天一觀的道長(zhǎng)船逮。 經(jīng)常有香客問我,道長(zhǎng)粤铭,這世上最難降的妖魔是什么挖胃? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮梆惯,結(jié)果婚禮上酱鸭,老公的妹妹穿的比我還像新娘。我一直安慰自己加袋,他們只是感情好凛辣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著职烧,像睡著了一般扁誓。 火紅的嫁衣襯著肌膚如雪防泵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天蝗敢,我揣著相機(jī)與錄音捷泞,去河邊找鬼。 笑死寿谴,一個(gè)胖子當(dāng)著我的面吹牛锁右,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讶泰,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咏瑟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了痪署?” 一聲冷哼從身側(cè)響起码泞,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狼犯,沒想到半個(gè)月后余寥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悯森,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年宋舷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓢姻。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祝蝠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汹来,到底是詐尸還是另有隱情续膳,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布收班,位于F島的核電站,受9級(jí)特大地震影響谒兄,放射性物質(zhì)發(fā)生泄漏摔桦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一承疲、第九天 我趴在偏房一處隱蔽的房頂上張望邻耕。 院中可真熱鬧,春花似錦燕鸽、人聲如沸兄世。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)御滩。三九已至鸥拧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間削解,已是汗流浹背富弦。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氛驮,地道東北人腕柜。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像矫废,于是被迫代替她去往敵國(guó)和親盏缤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 三種解法思路: 雙指針方式。一般利用s.toCharArray()轉(zhuǎn)換成數(shù)組比較便于操作诡蜓;最后再利用new Str...
    IvyAutumn閱讀 327評(píng)論 0 0
  • 算法思想貪心思想雙指針排序快速選擇堆排序桶排序荷蘭國(guó)旗問題二分查找搜索BFSDFSBacktracking分治動(dòng)態(tài)...
    第六象限閱讀 3,084評(píng)論 0 0
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • ??引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例蔓罚。 ??在 ECMAscript 中椿肩,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)...
    霜天曉閱讀 1,054評(píng)論 0 1
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,793評(píng)論 0 38