首先要確認字串的編碼方式,是ascii還是unicode,這很重要。
我們就當是ascii來處理吧,如果不是的話,只需要擴大儲存空間就可以了,其餘邏輯都是一樣的。
演算法一:
演算法的中心思想是利用雜湊表的原理,先初始化乙個陣列,然後迴圈取出字元,將下標為此字元的ascii值的位置置為true,如果將要儲存的下標已經是true,則證明有重複的字元了,返回false。
/**
* 判斷乙個字串是否各個字元都不同
* *@author liudezhi
*/public
class
stringisrepeat
/*** 全不相同返回true,有相同的返回false
*@param str
*@return
*/public
static
boolean
isuniquechars(string str)
boolean char_set = new
boolean[256];
for (int i = 0; i < str.length(); i++)
char_set[val] = true;
}return
true;
}}
這個演算法的時間複雜度為o(n),其中n為字串長度。空間複雜度為o(1)。
演算法二:
演算法的中心思想是使用位向量,可以將空間占有減少為原來的1/8。因為boolean是乙個位元組,int是4個位元組。
/**
* 判斷乙個字串是否各個字元都不同
* *@author administrator
*/public
class
stringisrepeat
/*** 全不相同返回true,有相同的返回false
*@param str
*@return
*/public
static
boolean
isuniquechars(string str)
int checker = 0;
for(int i = 0;i < str.length(); i++)
checker |= (1
true;
}}
確定乙個字串的所有字元是否全都不同
題目 給定乙個string inistring 請返回乙個bool值,true 代表所有字元全都不同,false 代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。思路 用乙個int做位運算,乙個int4個位元組32位,一共26個字母綽綽有餘。include incl...
確定乙個字串所有字元是否都不同
題目 實現乙個演算法,確定乙個字串的所有字元是否都不相同。解答 總共有256個字元,可以申請乙個布林陣列,初始化都為false.遍歷所有字元,把字元對應到布林陣列,如果陣列該位為true,則說明之前該字元出現過,否則修改值為true。bool same char str for int i 0 i ...
在乙個字串中尋找另外乙個字串
在乙個字串中尋找另外乙個字串 public class text foundit true break test system.out.println foundit?found it didn t find it 該段程式有點難以理解,主要就是if語句的理解,if searchme.charat ...