我必須實現一個函數,它接受一個字符串作爲輸入,並從這個字符串中找到非重複字符。如何刪除字符串中的重複字符?
因此,一個例子是,如果我通過字符串str =「DHCD」將返回「DHC」 或STR2 =「KLKLHHMO」將返回「KLHMO」
我必須實現一個函數,它接受一個字符串作爲輸入,並從這個字符串中找到非重複字符。如何刪除字符串中的重複字符?
因此,一個例子是,如果我通過字符串str =「DHCD」將返回「DHC」 或STR2 =「KLKLHHMO」將返回「KLHMO」
一個LINQ方法:
public static string RemoveDuplicates(string input)
{
return new string(input.ToCharArray().Distinct().ToArray());
}
它會做的工作
string removedupes(string s)
{
string newString = string.Empty;
List<char> found = new List<char>();
foreach(char c in s)
{
if(found.Contains(c))
continue;
newString+=c.ToString();
found.Add(c);
}
return newString;
}
我應該注意這是一個刑事效率低下的問題。
我覺得我第一次修改時神經過敏。
上午我猜對了,你故意把這種低效率作爲練習留給讀者,還是你想讓這個工作更快的建議? – SquareCog 2009-02-26 01:49:20
事實上,你是對的,如果它是家庭作業,那麼OP可以過濾並創建一個不可怕的東西。它也可以作爲了解正在發生的事情的基準。我不需要改進建議,謝謝。 – 2009-02-26 01:56:48
對於字節大小的字符(不適用於寬字符或其他編碼)的任意長度的字符串,我會使用查找表,每個字符一位(32位爲256位表)。循環遍歷字符串,只輸出沒有打開位的字符,然後打開該字符的位。
string removedupes(string s)
{
string t;
byte[] found = new byte[256];
foreach(char c in s)
{
if(!found[c]) {
t.Append(c);
found[c]=1;
}
}
return t;
}
我對C#不太好,所以我不知道使用位域而不是字節數組的正確方法。
如果你知道你的字符串會很短,那麼其他方法會提供更好的內存使用和/或速度。
這聽起來像是對我的功課,所以我只是要在高層次上描述。
char * remove_duplicates(char * str) { char * str1,* str2;
if(!str)
return str;
str1 = str2 = str;
while(*str2)
{
if(strchr(str, *str2)<str2)
{
str2++;
continue;
}
*str1++ = *str2++;
}
*str1 = '\0';
return str;
}
char* removeDups(const char* str)
{
char* new_str = (char*)malloc(256*sizeof(char));
int i,j,current_pos = 0,len_of_new_str;
new_str[0]='\0';
for(i=0;i<strlen(str);i++)
{
len_of_new_str = strlen(new_str);
for(j=0;j<len_of_new_str && new_str[j]!=str[i];j++)
;
if(j==len_of_new_str)
{
new_str[len_of_new_str] = str[i];
new_str[len_of_new_str+1] = '\0';
}
}
return new_str;
}
希望這有助於
我在java語言的答案。
在此處發帖,以便即使使用Java語言,您也可能會有想法。算法將保持不變。
public String removeDup(String s)
{
if(s==null) return null;
int l = s.length();
//if length is less than 2 return string
if(l<2)return s;
char arr[] = s.toCharArray();
for(int i=0;i<l;i++)
{
int j =i+1; //index to check with ith index
int t = i+1; //index of first repetative char.
while(j<l)
{
if(arr[j]==arr[i])
{
j++;
}
else
{
arr[t]=arr[j];
t++;
j++;
}
}
l=t;
}
return new String(arr,0,l);
}
在C#第一個答案的修訂版低於
串oldstr = 「abacab」;
string newstr = new string(oldstr.Distinct()。ToArray());
//這是在C#中,驗證冷落爲了簡潔 //原始的解決方案,從給定的字符串
public static char[] RemoveDup(string s)
{
char[] c = new char[s.Length];
int unique = 0;
c[unique] = s[0]; // Assume: First char is trivial
for (int i = 1; i < s.Length; i++)
{
if (s[i-1] != s[i]
c[++unique] = s[i];
}
return c;
}
String str="AABBCANCDE";
String newStr="";
for(int i=0; i<str.length(); i++)
{
if(!newStr.contains(str.charAt(i)+""))
newStr= newStr+str.charAt(i);
}
System.out.println(newStr);
void removeDuplicate()
{
string value1 = RemoveDuplicateChars("Devarajan");
}
static string RemoveDuplicateChars(string key)
{
string table = "";
string result = "";
foreach (char value in key)
{
if (table.IndexOf(value) == -1)
{
table += value;
result += value;
}
}
return result;
}
您可以使用HashSet的刪除重複的字符:
static void Main()
{
string textWithDuplicates = "aaabbcccggg";
Console.WriteLine(textWithDuplicates.Count());
var letters = new HashSet<char>(textWithDuplicates);
Console.WriteLine(letters.Count());
foreach (char c in letters) Console.Write(c);
}
//刪除上下兩個副本
public static string RemoveDuplicates(string key)
{
string Result = string.Empty;
foreach (char a in key)
{
if (Result.Contains(a.ToString().ToUpper()) || Result.Contains(a.ToString().ToLower()))
continue;
Result += a.ToString();
}
return Result;
}
var input1 = Console.ReadLine().ToLower().ToCharArray();
var input2 = input1;
var WithoutDuplicate = input1.Union(input2);
class Program
{
static void Main(string[] args)
{
bool[] doesExists = new bool[256];
String st = Console.ReadLine();
StringBuilder sb = new StringBuilder();
foreach (char ch in st)
{
if (!doesExists[ch])
{
sb.Append(ch);
doesExists[ch] = true;
}
}
Console.WriteLine(sb.ToString());
}
}
Console.WriteLine("Enter String");
string str = Console.ReadLine();
string result = "";
result += str[0]; // first character of string
for (int i = 1; i < str.Length; i++)
{
if (str[i - 1] != str[i])
result += str[i];
}
Console.WriteLine(result);
我喜歡昆廷·羅賓遜的答案,只應該有像刪除列表一些改進,因爲它不是在這種情況下necessarry。 此外,在我看來,大寫字母(「K」)和小寫字母(「K」)是相同的東西,所以他們應該算作一個。
因此,這裏是我會怎麼做:
private static string RemoveDuplicates(string textEntered)
{
string newString = string.Empty;
foreach (var c in textEntered)
{
if (newString.Contains(char.ToLower(c)) || newString.Contains(char.ToUpper(c)))
{
continue;
}
newString += c.ToString();
}
return newString;
}
不知道如何優化,它是:
public static string RemoveDuplicates(string input)
{
var output = string.Join("", input.ToHashSet());
return output;
}
下面是從一個字符串中刪除重複的字符代碼
var input = "SaaSingeshe";
var filteredString = new StringBuilder();
foreach(char c in input)
{
if(filteredString.ToString().IndexOf(c)==-1)
{
filteredString.Append(c);
}
}
Console.WriteLine(filteredString);
Console.ReadKey();
標題名稱錯誤 - 您想從字符串中刪除重複的字符。 – 2009-02-26 01:47:11
你可以發佈你迄今爲止嘗試過的嗎? – SquareCog 2009-02-26 01:47:13
LINQ解決方案應該很有趣。 – 2009-02-26 01:51:21