我必须实现一个函数,该函数将字符串作为输入并从该字符串中查找非重复字符。
所以一个例子是如果我传递字符串str =“DHCD”它将返回“DHC” 或str2 =“KLKLHHMO”它将返回“KLHMO”
答案 0 :(得分:31)
Linq方法:
public static string RemoveDuplicates(string input)
{
return new string(input.ToCharArray().Distinct().ToArray());
}
答案 1 :(得分:8)
它将完成这项工作
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;
}
我应该注意到这是非常低效的。
我认为我在第一次修订时神志不清。
答案 2 :(得分:6)
对于任意长度的字节大小的字符串(不适用于宽字符或其他编码),我会使用查找表,每个字符一位(256位表为32位)。循环遍历你的字符串,只输出没有打开其位的字符,然后打开该字符的位。
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#不好,所以我不知道使用位域而不是字节数组的正确方法。
如果你知道你的字符串非常短,那么其他方法可以提供更好的内存使用和/或速度。
答案 3 :(得分:4)
void removeDuplicate()
{
string value1 = RemoveDuplicateChars("Devarajan");
}
static string RemoveDuplicateChars(string key)
{
string result = "";
foreach (char value in key)
if (result.IndexOf(value) == -1)
result += value;
return result;
}
答案 4 :(得分:3)
这对我来说听起来像是家庭作业,所以我只是要在高层次上进行描述。
答案 5 :(得分:1)
我在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);
}
答案 6 :(得分:1)
//这是在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;
}
答案 7 :(得分:1)
你可以使用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);
}
答案 8 :(得分:0)
//删除两个上下重复项
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;
}
答案 9 :(得分:0)
这对我有用
private string removeDuplicateChars(String value)
{
return new string(value.Distinct().ToArray());
}
答案 10 :(得分:0)
namespace演示{类程序{
static void Main(string[] args) { string myStr = "kkllmmnnouo"; Console.WriteLine("Initial String: "+myStr); // var unique = new HashSet<char>(myStr); HashSet<char> unique = new HashSet<char>(myStr); Console.Write("New String after removing duplicates: "); foreach (char c in unique) Console.Write(c); } } }
答案 11 :(得分:0)
以下是从字符串中删除重复字符的代码
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();
答案 12 :(得分:0)
不确定它的最佳状态:
public static string RemoveDuplicates(string input)
{
var output = string.Join("", input.ToHashSet());
return output;
}
答案 13 :(得分:0)
我喜欢Quintin Robinson的回答,只是应该有一些改进,例如删除List,因为在这种情况下它不是必需的。 另外,在我看来,大写字母(&#34; K&#34;)和小写字母(&#34; k&#34;)是相同的,所以它们应该算作一个。
所以我会这样做:
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;
}
答案 14 :(得分:0)
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);
答案 15 :(得分:0)
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());
}
}
答案 16 :(得分:0)
答案 17 :(得分:0)
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);
答案 18 :(得分:0)
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;
}
希望这有帮助
答案 19 :(得分:-1)
var input1 = Console.ReadLine().ToLower().ToCharArray();
var input2 = input1;
var WithoutDuplicate = input1.Union(input2);
答案 20 :(得分:-1)
C#中第一个答案的修订版本在
之下string oldstr =“abacab”;
string newstr = new string(oldstr.Distinct()。ToArray());