字符串逆序和字符串元音逆序(leetcode344&&345)

題目描述1(344)

  • 給定一個(gè)字符串,寫一個(gè)函數(shù)將其逆序輸出

題目描述2(345)

  • 給定一個(gè)字符串,寫一個(gè)函數(shù)實(shí)現(xiàn)字符串中的原因字母逆序,其余的不變

解題思路(逆序)

  • 逆序就是一個(gè)遍歷的過程,然后不停的交換位置這是最直接暴力也應(yīng)該是最優(yōu)解法了(不包含采用語言本身的逆序輸出函數(shù))
  • JAVA操作需要將字符串先轉(zhuǎn)換為數(shù)組,為了加快交換速度,我們將數(shù)組從兩邊同時(shí)開始遍歷交換,當(dāng)low指針>high指針時(shí)完成遍歷

代碼1

class Solution {
    public String reverseString(String s) {
        char[] array = new char[s.length()];
        int low = 0, high = s.length()-1;
        while (low <= high) {
            array[low] = s.charAt(high);
            array[high] = s.charAt(low);
            high--;
            low++;
        }
        return new String(array);
    }
}

解題思路2(元音逆序)

  • 首先逆序思路大體和上述差不多,但是我們需要注意此時(shí)需要的是元音逆序,那么low指針和high指針的指向必須是元音字母,這就可以采用類似于快排的思想,在low指針一直用while查找到一個(gè)元音字母,再用high指針用while查找到一個(gè)元音字母將其交換順序,然后進(jìn)行下一輪
  • 一直到low > high為止,在這個(gè)過程中需要注意數(shù)組越界的問題,和第一題相比多了一點(diǎn)條件
  • 時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)

源代碼2

class Solution {
    /*
    1. 首先將字符串轉(zhuǎn)換為字符數(shù)組,便于交換操作
    2. 根據(jù)提示,需要找出元音字母進(jìn)行交換,我們只需要找出對(duì)應(yīng)的下標(biāo)即可,可根據(jù)快排的思想,我們從兩邊分別開始查找。
    左邊查找到一個(gè)元音字母時(shí),然后再用while循環(huán)從右邊查找元音字母,此時(shí)將兩個(gè)元音字母交換就可完成逆序,依次進(jìn)行直到
    大小兩個(gè)指針相遇結(jié)束。
    3. 需要隨時(shí)注意下標(biāo)越界的情況,否則會(huì)報(bào)錯(cuò)
    4. 時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)
    */
    public String reverseVowels(String s) {
        if (s.length() == 0) return s;
        char[] array = s.toCharArray();
        int low = 0, high = s.length()-1;
        while (low <= high) {
            while (low <= s.length() - 1 && !isVowels(array[low])) low++;
            while (high >= 0 && !isVowels(array[high])) high--;
            if (low <= high) exch(array, low, high);
            low++;
            high--;
        }
        return new String(array);
    }
    
    private void exch(char[] array, int i, int j) {
        char temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    
    private boolean isVowels(char c) {
        if (c == 'a' || c == 'e' ||
            c == 'i' || c == 'o' ||
            c == 'A' || c == 'E' ||
            c == 'I' || c == 'O' ||
            c == 'u' || c == 'U') {
            return true;
        } else return false;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 算法思想貪心思想雙指針排序快速選擇堆排序桶排序荷蘭國(guó)旗問題二分查找搜索BFSDFSBacktracking分治動(dòng)態(tài)...
    第六象限閱讀 4,902評(píng)論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,683評(píng)論 0 4
  • 蒲公英模式也稱"蒲公英商業(yè)模式"或"分紅交易",是一種將舊書、舊報(bào)刊的循環(huán)再利用的多方獲利的一種商業(yè)模式,它以節(jié)能...
    哈嘍hello閱讀 434評(píng)論 0 0
  • 雨后不光是陽光燦爛!還有破繭成蝶!
    璇璣_閱讀 258評(píng)論 0 1
  • 人的對(duì)一件事或人的自然反應(yīng)就能反映出這件事或人的重要性,當(dāng)然它也有很重要重要之分。 你第一件想做的事情必定是在你心...
    我是阿酷閱讀 251評(píng)論 0 0

友情鏈接更多精彩內(nèi)容