請實現乙個演算法,確定乙個字串的所有字元是否全都不同。這裡我們要求不允許使用額外的儲存結構。
給定乙個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 返...