請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。
給定乙個stringinistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。
首先,不看條件不允許使用額外的資料結構的話,我最先想到的就是使用hashmap,遍歷一遍,儲存每個字元一共有多少個,再遍歷一遍hashmap,看看是否每個字元都是單一的。解法就是: 時間複雜度為0(n),空間複雜度o(n)
hashmapstr=new hashmap<>();
for (int i=0;i1)
}return true;
條件不允許使用額外的儲存結構,也就是只能使用這種陣列形式的儲存結構
第乙個思路,就是直接兩個for循換完事了 時間複雜度o(n^2),空間複雜度o(n)
for(int i=0;i看了下討論區的,突然恍然大霧,其實兩個for循換不用遍歷到n,只用遍歷到256,就可以了,再多 就必然重複,一共就256種字元,這樣時間複雜度為o(1)
但是時間複雜度太高,因為是字串,一般預設ascii碼,一共只有256個字元,則建立乙個容量為256的陣列,雜湊這個字串,判斷即可
時間複雜度為o(n),空間複雜度為o(n)
if (inistring.length()>256)
boolean char1=new boolean[256];
for (int i=0;ichar1[val]=true;
}return true;
}
確定字元互異
題目描述 請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。給定乙個string inistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。測試樣例 a...
確定字元互異
題目描述 請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。給定乙個string inistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。測試樣例 a...
確定字元互異
請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。給定乙個stringinistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。測試樣例 aeiou 返...