1. 程式人生 > >【Java,面試】實現一個演算法,確定一個字串的所有字元是否全都不同

【Java,面試】實現一個演算法,確定一個字串的所有字元是否全都不同

//method to figure out if there's no duplicate char in a ASCII string

import java.lang.String


boolean isUniquedChars(String myString)
{
	if(myString.length() > 256)
		return false;
	
	boolean[] char_set = new boolean[256];
	for (int i = 0; i < myString.length(); i++)
	{
		int val = myString.charAt(i);
		if (char_set[val])
		{ return false; }
		char_set[val] = true;
	}
	return true;
}



//method 2
boolean isUniquedChars_method2(String str)
{
	if (str.length() > 256)
	{
		return false;
	}
	
	int checker = 0;
	for (int i = 0; i < str.length(); i++)
	{
		int val = str.charAt(i) - 'a';
		if (checker & (1 << val) > 0)
		{return false;}
		checker |= (1 << val);
	}
	return true;
}


實現一個演算法,確定一個字串的所有字元是否全都不同

首先 詢問字串是ASCII 還是Unicode,二者不同只在於unicode需要更大的儲存空間。

以上兩個辦法中,第一個辦法的時間複雜度為O(n), 空間複雜度為O(1)

第二個辦法通過位運算把空間幅度減小為了原來的1/8(程式碼假定字串只含有小寫的a到z),時間複雜度不變。

還有其他解法:

將字串中的每個字元與其他字元比較,時間複雜度O(n2),空間複雜度O(1)

對字串進行時間複雜度為O(nlog(n))的排序,線性檢查有沒有相鄰字元完全相同的情況