1.【Java/Python】判斷字符串是否為變位詞

【題目】

寫一個函數(shù)判斷兩個字符串是否是變位詞。

【分析】

變位詞(anagrams)指的是組成兩個單詞的字符相同,但位置不同的單詞。比如說, abbcd和abcdb就是一對變位詞。該題目有兩種思路:

【思路一】

由于變位詞只是字母順序不同,而長度一樣,字符種類一樣。因此只需對兩個字符串進(jìn)行排序,排序后兩個字符串一致則為變位詞。
We are young --- are young We這是一對變位詞。(這種解法算不上最優(yōu),不過清晰、簡單易懂,從實踐角度出發(fā),這可能是解決該問題的上佳之選。但是為了效率,還有更好的解法。)

【思路二】

由于組成變位詞的字符都一樣,因此可以統(tǒng)計每個字符串中字符出現(xiàn)的次數(shù),然后看兩個字符串中各字符出現(xiàn)的次數(shù)是否一致。如果是,則它們是一對變位詞。 可以開一個數(shù)組保存字符出現(xiàn)的次數(shù)。我們可以開一個大小是256的整數(shù)數(shù)組,遍歷第一個字符串,將相應(yīng)的字符出現(xiàn)的次數(shù)加1;遍歷第二個字符串時,將相應(yīng)出現(xiàn)的次數(shù)減1。最后如果數(shù)組中256個數(shù)都是0,說明兩個字符串是一對變位詞。(第一個字符串出現(xiàn)的字符都被第二個字符串出現(xiàn)的字符抵消了)。如果有一個不為0則不是變位詞。

【Java代碼 思路一】
import java.util.Arrays

public class Solution{
  /**
     * @param s: The first string
     * @param b: The second string
     * @return true or false
     */
    public boolean anagram(String s, String t) {
        // write your code here
        if( s.length() != t.length())
            return false;
        return sort(s).equals(sort(t));
    }
    //字符串排序
    public String sort(String s){
        char[] a = s.toCharArray();
        Arrays.sort(a);
        return new String(a);
    }
}
【Java代碼 思路二】
    public boolean anagram(String s, String t){
        if(s.length() != t.length()){
            return false;
        }
        int[] ascii = new int[256];
        for(char i : s.toCharArray())
            ascii[i]++;
        for(int j=0; j<t.length(); j++){
            if(--ascii[t.charAt(j)] < 0)
                return false;
        }
        return true;
    }
【Python代碼 思路一】
【Python代碼 思路二】
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,682評論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • -- 參加《培訓(xùn)師九段》課程有感 3天《培訓(xùn)師九段》課程,在意猶未盡中,悄然落下帷幕,深深感恩!感恩知識變現(xiàn)...
  • 流血, 結(jié)痂, 撕裂, 再度流血, 再度潰爛, 又在度結(jié)痂, 握著手術(shù)刀, 將疤痕再次剖開, 用新的眼光, 去審視...
    山太閱讀 662評論 0 1
  • 我以為別人尊重我,是因為我很優(yōu)秀。慢慢的我明白了,別人尊重我,是因為別人很優(yōu)秀;優(yōu)秀的人更懂得尊重別人。對人...
    正陽媽媽閱讀 108評論 0 1

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