經(jīng)典面試題34 - 字符串的全排列

問題

給定兩個(gè)字符串,如何判斷一個(gè)是否為另一個(gè)的全排列字符串。

全排列 - 通過改變順序可以使得兩個(gè)字符串相等。

假設(shè)給定字符串 ‘bacda’和‘a(chǎn)abcd’, 其就是全排列字符串。

解答

如果不考慮運(yùn)行效率,可以分別對(duì)兩個(gè)字符串進(jìn)行排序,排序后的兩個(gè)字符串如果完全相等則返回true,反之返回false。

Java代碼如下:

     public String sort(String s) {
        char[] content = s.toCharArray();
        java.util.Arrays.sort(content);
        return new String(content);
    }
    
    public boolean permutation(String s, String t) {
        return sort(s).equals(sort(t));
    }   

上面思路的時(shí)間復(fù)雜度大于O(n)的,我們可以參考經(jīng)典面試題33 - 字符串有無重復(fù)字符中的思路,

我們定義一個(gè)數(shù)組,其長度就是字符集的長度(字符串長度不相等不可能是全排列關(guān)系),其中預(yù)先填充所有值為0。 首先遍歷一遍s1中的字符,將其對(duì)應(yīng)位置增1,然后再遍歷s2,將其對(duì)應(yīng)位置減1。

如果在遍歷s2的時(shí)候,發(fā)現(xiàn)數(shù)組中出現(xiàn)負(fù)數(shù),則說明s2和s1不是全排列關(guān)系,返回false,若s2遍歷能夠完成,返回true。

Java代碼如下:

 public static boolean permutation(String s, String t) {
        if (s.length() != t.length()) return false; 
        
        int[] letters = new int[128]; // 假設(shè)是ASCII編碼集
        for (int i = 0; i < s.length(); i++) {
            letters[s.charAt(i)]++;
        }
          
        for (int i = 0; i < t.length(); i++) {
            letters[t.charAt(i)]--;
            if (letters[t.charAt(i)] < 0) {
                return false;
            }
        }
          
        return true; 
    }

更多

經(jīng)典面試100題 - 持續(xù)更新中

獲取更多內(nèi)容請(qǐng)關(guān)注微信公眾號(hào)豆志昂揚(yáng):

  • 直接添加公眾號(hào)豆志昂揚(yáng);
  • 微信掃描下圖二維碼;
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 字符串String String基礎(chǔ) 1)String位于java.lang包中,Java程序默認(rèn)導(dǎo)入java.l...
    全棧JAVA筆記閱讀 872評(píng)論 0 6
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,691評(píng)論 0 4
  • ??引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例。 ??在 ECMAscript 中,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)...
    霜天曉閱讀 1,227評(píng)論 0 1
  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,081評(píng)論 0 2
  • package cn.itcast_01;/* 字符串:就是由多個(gè)字符組成的一串?dāng)?shù)據(jù)。也可以看成是一個(gè)字符數(shù)組。 ...
    蛋炒飯_By閱讀 730評(píng)論 0 0

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