01 確定字元互異

2021-09-19 16:21:12 字數 1503 閱讀 2305

請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。

給定乙個stringinistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。

測試樣例:

1."aeiou" 返回:true

2."barackobama" 返回:false

兩層for迴圈,依次比較,發現相同字元就返回false。

public boolean checkdifferent1(string inistring) 

return true;

}

字元編碼是ascii字符集,則總共只有256個字元;若為unicode編碼,則總共有65536。

對字串的處理如下:

1) 如果字串長度大於256,則必然有重複的字元出現,返回false;

2)如果字串長度小於256,構建乙個長度為256的boolean陣列,索引值即為字元編碼,則對每個元素從i = 0 ~ inistring.length()  - 1進行遍歷。若字元重複出現,返回false。

根據抽屜原理,判斷前257個字元即可,時間複雜度為o(1),空間複雜度為o(1)。

public boolean checkdifferent2(string inistring) 

boolean char_set = new boolean[256];//不用額外空間就是空間複雜度o(1)

for (int i = 0; i < inistring.length(); i++)

return true;

}

對字元進行排序,然後線性檢查相鄰元素是否有重複。arrays類中的sort()使用的是「經過調優的快速排序法」,時間複雜度為o(nlogn)。

public boolean checkdifferent3(string inistring) 

char char_set= inistring.tochararray();

arrays.sort(char_set);

for(int i=1;i大神寫的,再次感慨正則的強大!!!!!!!!

public boolean checkdifferent(string inistring)

.:代表任意乙個字元

.*:代表任意乙個字元後面有0個或多個字元

(.):選擇字元中任意乙個字元進行複製 和後面的(.*\\1)結合進行判斷是否後面存在乙個字元與它相同

(.)(.*\\1):匹配案例 a*a(即首尾相同的abcsa)

(.)(.*\\1).*:匹配案例 a*a*

.*(.)(.*\\1):匹配案例 *a*a

.*(.)(.*\\1).*:匹配案例 *a*a*

確定字元互異

題目描述 請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。給定乙個string inistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。測試樣例 a...

確定字元互異

題目描述 請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。給定乙個string inistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。測試樣例 a...

確定字元互異

請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。給定乙個stringinistring,請返回乙個bool值,true代表所有字元全都不同,false代表存在相同的字元。保證字串中的字元為ascii字元。字串的長度小於等於3000。測試樣例 aeiou 返...