2021-08-19leetcode刷題——345、反轉(zhuǎn)字符串中的元音字母

【微信公眾號:yi極】

反轉(zhuǎn)字符串中的元音字母

題目描述:

給你一個字符串 s 奥溺,僅反轉(zhuǎn)字符串中的所有元音字母辞色,并返回結(jié)果字符串。
元音字母包括 'a'、'e'相满、'i'层亿、'o'、'u'立美,且可能以大小寫兩種形式出現(xiàn)匿又。

方法1:

思路:
在HashSet中放入所有元音字母的大小寫,將字符串轉(zhuǎn)化成字符數(shù)組中處理建蹄,兩個變量分別指向數(shù)組第一個和最后一個元素碌更,分別尋找是否有元音字母找到就相互交換。最后將數(shù)組轉(zhuǎn)換成字符串返回洞慎。

class Solution1 {
    /*
     * 執(zhí)行用時: 3 ms
     * 內(nèi)存消耗: 38.7 MB
     * */
    private static HashSet<Character> vowels = new HashSet<Character>(){{
        add('a');
        add('A');
        add('e');
        add('E');
        add('i');
        add('I');
        add('o');
        add('O');
        add('u');
        add('U');
    }};//將元素存儲到set中
    
    public static String reverseVowels(String s) {

        int i = 0;
        int j = s.length()-1;
        
        char [] ch = s.toCharArray();
        
        while(i < j){
            while( i < j && !vowels.contains( ch[i] )){
                i++;
            }
            while( i < j && !vowels.contains( ch[j] )){
                j--;
            }
            if ( ch[i] != ch[j] ){
                char temp = ch[i];
                ch[i] = ch[j];
                ch[j] = temp;
            }
            i++;
            j--;
        }
        
        return String.valueOf(ch);
    }
}

注意:Java中HashSet的使用

HashSet類位于 java.util 包中痛单,HashSet類用于創(chuàng)建使用哈希表進行存儲的集合。它繼承了AbstractSet類并實現(xiàn)Set接口劲腿。

HashSet有如下特點:

HashSet 基于 HashMap 來實現(xiàn)的旭绒,是一個不允許有重復元素的集合。
HashSet 允許有 null 值焦人。
HashSet 是無序的挥吵,即不會記錄插入的順序。因為元素是根據(jù)其哈希碼插入的花椭。
HashSet 實現(xiàn)了 Set 接口
HashSet 通過使用一種稱為哈希的機制來存儲元素忽匈。
HashSet 方便檢索數(shù)據(jù)。
HashSet 的初始默認容量為16矿辽,而負載因子為0.75丹允。
HashSet 類是非同步的(線程不安全)。如果多個線程嘗試同時修改 HashSet袋倔,則最終結(jié)果是不確定的嫌松。 必須在多線程訪問時顯式同步對 HashSet 的并發(fā)訪問。

HashSet有如下方法:

add(E e) 向Set集合中添加元素奕污,添加成功返回true,否則返回false液走。
isEmpty() 如果HashSet不包含元素返回true碳默,否則返回false。
size() 返回獲取HashSet中的元素個數(shù)缘眶。
contains(Object o) 如果HashSet中找到指定元素嘱根,返回true,否則返回false巷懈。
iterator() 用于返回用于遍歷HashSet元素的迭代器對象该抒。迭代器可以從HashSet中存在的元素開始以隨機順序返回元素。
remove(Object o) 如果指定元素存在于此 set 中顶燕,則將其移除凑保。
clear() 用于從集中刪除所有元素冈爹。

public static void main(String[] args) {
    
    HashSet<String> hashSet = new HashSet<String>();
    
    hashSet.add("AAA");
    hashSet.add("BBB");
    hashSet.add("CCC");
    hashSet.add("DDD");
    hashSet.add("EEE");
    
    System.out.println("The size of the set is "+hashSet.size());//The size of the set is 5

    System.out.println( String.valueOf(hashSet.contains("BBB")) );//true
    
    hashSet.remove("DDD");
    
    //使用迭代器獲取輸出內(nèi)容
    Iterator<String> iterator = hashSet.iterator();
    
    while(iterator.hasNext()){
        System.out.printf("%s",iterator.next());//AAACCCBBBEEE
    }
    System.out.println();
    
    hashSet.clear();
    
    if (hashSet.isEmpty()){
        System.out.println("The set is empty");//The set is empty
    } else {
        System.out.println("The set is not empty");
    }
}

方法2:

思路:
將字符串轉(zhuǎn)化成字符數(shù)組中處理,兩個變量分別指向數(shù)組第一個和最后一個元素欧引,分別尋找是否有元音字母找到就相互交換频伤。最后將數(shù)組轉(zhuǎn)換成字符串返回。

class Solution2 {
    /*
     * 執(zhí)行用時: 3 ms
     * 內(nèi)存消耗: 38.5 MB
     * */
    private static boolean vowel(char ch){
        
        ch = Character.toLowerCase(ch);
        
        return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
    }
    
    public static String reverseVowels(String s) {
        
        int l = 0;
        int r = s.length()-1;
        
        char [] arr = s.toCharArray();
        
        while(l < r){
           while(l < r && !vowel(arr[l])){
               l++;
           }
           while(l < r && !vowel(arr[r])){
               r--;
           }
           if (l < r){
               
               char temp = arr[l];
               arr[l] = arr[r];
               arr[r] = temp;
               
               l++;
               r--;
           }
        }
        
        return new String(arr);
    }

注意:Java中toLowerCase()芝此、toUpperCase() 的使用

toLowerCase是將所有的英文字符轉(zhuǎn)換為小寫字母
toUpperCase是將所有的英文字符轉(zhuǎn)換為大寫字母

public static void main(String[] args) {
    
    String str = "Synchronized";
    
    System.out.println(str.toLowerCase());//synchronized
    System.out.println(str.toUpperCase());//SYNCHRONIZED
}

測試代碼:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    
    System.out.printf("請輸入字符串s = ");
    String s = sc.nextLine();
    
    System.out.println(reverseVowels(s));
}

運行結(jié)果:
屏幕截圖1.png
屏幕截圖2.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載憋肖,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末婚苹,一起剝皮案震驚了整個濱河市岸更,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膊升,老刑警劉巖怎炊,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異用僧,居然都是意外死亡结胀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門责循,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糟港,“玉大人,你說我怎么就攤上這事院仿〗崭В” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵歹垫,是天一觀的道長剥汤。 經(jīng)常有香客問我,道長排惨,這世上最難降的妖魔是什么吭敢? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮暮芭,結(jié)果婚禮上鹿驼,老公的妹妹穿的比我還像新娘。我一直安慰自己辕宏,他們只是感情好畜晰,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑞筐,像睡著了一般凄鼻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天块蚌,我揣著相機與錄音闰非,去河邊找鬼。 笑死匈子,一個胖子當著我的面吹牛河胎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虎敦,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼游岳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了其徙?” 一聲冷哼從身側(cè)響起胚迫,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唾那,沒想到半個月后访锻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡闹获,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年期犬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片避诽。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡龟虎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沙庐,到底是詐尸還是另有隱情鲤妥,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響攻晒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贡耽,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹊汛。 院中可真熱鬧菇爪,春花似錦、人聲如沸柒昏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽职祷。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間有梆,已是汗流浹背是尖。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泥耀,地道東北人饺汹。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像痰催,于是被迫代替她去往敵國和親兜辞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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