第二天 確定字符互異

題目出自程序員面試金典。

看到這道題直接跳出來了兩個想法:1. 暴力不是很複雜; 2. Hash/Map之流的(違反題目要求)。


習慣性先寫了暴力方法(內心OS:竟然沒有超過時間)

class Different {
public:
    bool checkDifferent(string iniString) 
    {
          for (int i = 0; i < iniString.length(); i++) 
          {
            for (int j = i+1; j < iniString.length(); j++) 
            {
               if (iniString[i] == iniString[j])
               return false;
            }
          }
          return true;    
    }    
};

Result  運行時間:0ms   佔用內存:8552k

點評:時間複雜度不能看,而且沒用到string的特性,調用對應函數會更漂亮。


借鑑了他人的解法有非常漂亮的地方:1. 抽屜原理(大讚);2. 排序的想法(那裏都有你呢)。


以下是一個非常漂亮的方法(不是我寫的QAQ)

class Different {
public:
    bool checkDifferent(string iniString) {
        // write code here
        sort(iniString.begin(), iniString.end());
        if(unique(iniString.begin(), iniString.end()) == iniString.end()) return true;
        else return false;
    }
};
收穫 1. sort升序排列,可自定義compare;

                 2. unique在STL中unique函數是一個去重函數, unique的功能是去除相鄰的重複元素(只保留一個),其實它並不真正把重複的元素刪除,是把重複的元素移到後面去了,然後依然保存到了原數組中,然後 返回去重後最後一個元素的地址,因爲unique去除的是相鄰的重複元素,所以一般用之前都會要排一下序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章