題目出自程序員面試金典。
看到這道題直接跳出來了兩個想法: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去除的是相鄰的重複元素,所以一般用之前都會要排一下序。