《Cracking the Coding Interview程式設計師面試金典》----確定字元互異
時間限制:3秒 空間限制:32768K 熱度指數:8610
演算法知識視訊講解題目描述
請實現一個演算法,確定一個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。
給定一個string iniString,請返回一個bool值,True代表所有字元全都不同,False代表存在相同的字元。保證字串中的字元為ASCII字元。字串的長度小於等於3000。
測試樣例:
"aeiou"
返回:True
"BarackObama"
返回:False
解題思路:
ASCII中字元的個數也是有限的,有256個。因此這題可以用一個大小為256的陣列,遍歷字串時把對應的個數記錄在陣列裡,陣列某一項數字超過1那麼就表示有重複字元了。
#include<iostream>
#include<iomanip>
#include<cmath>
#include<stdio.h>
#include<string.h>
using namespace std;
bool checkDifferent(string iniString) {
//ascii字符集只有256個字元
if (iniString.size() > 256)
return false;
bool result[256] = { false };
for (size_t i = 0; i < iniString.size(); ++i)
{
int tmp = iniString[i];
if (result[tmp])
return false;
result[tmp] = true;
}
return true;
}
int main()
{
double s;
int i;
string n, m;
while (cin >> n)
{
if (checkDifferent(n) == 1)
cout << "Ture" << endl;
if (checkDifferent(n) == 0)
cout << "False" << endl;
}
return 0;
}
如果範圍縮寫到a-z,
26個字元,那麼也可以用位操作來解決這個問題。對於26個字元,每個字元在它對應的ASCII碼值對應的位置上設定一個標誌,例如設定標誌位為1,當字元不重複時1的位置都是錯開的,所以位與的的結果必定為零,不為零說明之前出現過一個這樣的字元。26個字元需要的資料型別至少有26位,而int型有32位,夠用了。
#include<iostream>
#include<iomanip>
#include<cmath>
#include<stdio.h>
#include<string.h>
using namespace std;
bool checkDifferent(string iniString) {
if (iniString.size() > 256)
return false;
int result = 0;
for (size_t i = 0; i < iniString.size(); ++i)
{
int c = iniString[i] - 'a';
int check = 1 << c;
if ((result & check) != 0) //注意'&'的優先順序比‘<','!='低,括號不能丟
return false;
result |= check;
}
return true;
}
int main()
{
double s;
int i;
string n, m;
while (cin >> n)
{
if (checkDifferent(n) == 1)
cout << "Ture" << endl;
if (checkDifferent(n) == 0)
cout << "False" << endl;
}
return 0;
}
不懂的可以加我的QQ群:261035036(IT程式設計師面試寶典
群) 歡迎你的到來哦,看了博文給點腳印唄,謝謝啦~~
相關文章
- 《Cracking the Coding Interview程式設計師面試金典》----清除行列View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----確定兩串亂序同構View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----空格替換View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----詞頻統計View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----貓狗收容所View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----子串判斷View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最長合成字串View程式設計師面試字串
- 《Cracking the Coding Interview程式設計師面試金典》----數字發音View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最小調整有序View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----連結串列分割View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----原串翻轉View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----畫素翻轉View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----翻轉子串View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最大和子矩陣View程式設計師面試矩陣
- 《Cracking the Coding Interview程式設計師面試金典》----字串變換(字典樹)View程式設計師面試字串
- 《Cracking the Coding Interview程式設計師面試金典》----實時中位數View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----整數對查詢View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----單詞最近距離View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----連結串列A+BView程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----迴文連結串列View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----基本字串壓縮View程式設計師面試字串
- 《Cracking the Coding Interview程式設計師面試金典》----C++過載>>和View程式設計師面試C++
- 《Cracking the Coding Interview程式設計師面試金典》----最大連續數列和View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最大字母矩陣(字母相同)View程式設計師面試矩陣
- 《Cracking the Coding Interview程式設計師面試金典》----最大子方塊(尋找01)View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----另類加法(不得使用+-x/運算子號)View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----下一個元素(下一個比他大的)View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----連結串列中倒數第k個結點View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----從0到n中某個數字的個數View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----下一個較大元素(所有比他大中最小的)View程式設計師面試
- 【程式設計師面試金典】洪水程式設計師面試
- 程式設計師面試金典Chapter1程式設計師面試APT
- 技術面試聖經《Cracking the Coding Interview》題解C++版面試ViewC++
- 【程式設計師面試寶典】確定兩串亂序同構程式設計師面試
- 程式設計師面試金典--筆記(精華篇)程式設計師面試筆記
- cracking the coding interview系列C#實現ViewC#
- 【程式設計師面試金典】20180801程式設計師面試
- 智力題(程式設計師面試經典)程式設計師面試