LintCode-55.比較字符串

題目

描述

比較兩個字符串A和B,確定A中是否包含B中所有的字符。字符串A和B中的字符都是大寫字母

樣例

給出 A = "ABCD" B = "ACD",返回 true
給出 A = "ABCD" B = "AABC", 返回 false

解答

思路1

  1. 將字符串轉換成StringBuffer,按字符兩次循環比較,A中存在B的字符設置為空
  2. 不能用deleteChar因為刪除字符之后StringBuffer的長度就變化了
  3. 既然是需要全部存在。內存循環找到后break;內層循環每次檢查之后如果有任何一個字符不存在直接返回false,如果程序走到最后還沒return fasle,return true即可。
  4. 整體時間復雜度為O(n^2),既然題目中說都是大寫字符,應該能在這里做文章,得到更快的算法。

代碼1

public class Solution {
    /**
     * @param A : A string includes Upper Case letters
     * @param B : A string includes Upper Case letter
     * @return :  if string A contains all of the characters in B return true else return false
     */
    public boolean compareStrings(String A, String B) {
        // write your code here
        StringBuffer sb1 = new StringBuffer(A);
        StringBuffer sb2 = new StringBuffer(B);
        int result = 0;
        for(int i = 0; i < sb2.length(); i++){
            boolean temp = true;
            for(int j=0; j < sb1.length(); j++){
                if(sb1.charAt(j) == sb2.charAt(i)){
                    sb1.setCharAt(j,' ');
                    temp=false;
                    break;
                }
            }
            if(temp) return false;
        }
        return true;
    }
}

思路2

  1. 既然都是大寫字母,那么只有26種字符可能。
  2. 字符取值范圍確定,就可以用空間復雜度換取時間復雜度。

代碼2

public class Solution {
    /**
     * @param A : A string includes Upper Case letters
     * @param B : A string includes Upper Case letter
     * @return :  if string A contains all of the characters in B return true else return false
     */
    public boolean compareStrings(String A, String B) {
        // write your code here
        StringBuffer sbA = new StringBuffer(A);
        StringBuffer sbB = new StringBuffer(B);
        int[] sa = new int[27];
        for(int i=0; i < sbA.length(); i++){
            sa[sbA.charAt(i)-'A']++;
        }for(int j=0;j < sbB.length(); j++){
            sa[sbB.charAt(j)-'A']--;
        }
        for(int k=0; k<27; k++){
            if(sa[k]<0) return false;
        }
        return true;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 《裕語言》速成開發手冊3.0 官方用戶交流:iApp開發交流(1) 239547050iApp開發交流(2) 10...
    葉染柒丶閱讀 27,790評論 5 19
  • 《ijs》速成開發手冊3.0 官方用戶交流:iApp開發交流(1) 239547050iApp開發交流(2) 10...
    葉染柒丶閱讀 5,321評論 0 7
  • 《ilua》速成開發手冊3.0 官方用戶交流:iApp開發交流(1) 239547050iApp開發交流(2) 1...
    葉染柒丶閱讀 10,972評論 0 11
  • 春無百花 夏無炙熱 秋無碩果 冬無白雪 是眼睛蒙蔽了心 還是心欺騙了眼睛 四季 無一例外 灰蒙蒙 不是所有的辜負 ...
    舒漓閱讀 144評論 5 8