我想从字符串中提取唯一字符。例如: - 'AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ'
将返回'ABCFGDJ'
我试过下面的代码,但现在我想优化它。 如果有人知道,请建议。
static string extract(string original)
{
List<char> characters = new List<char>();
string unique = string.Empty;
foreach (char letter in original.ToCharArray())
{
if (!characters.Contains(letter))
{
characters.Add(letter);
}
}
foreach (char letter in characters)
{
unique += letter;
}
return unique;
}
答案 0 :(得分:13)
我不知道这是否更快,但肯定更短
string s = "AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ";
var newstr = String.Join("", s.Distinct());
答案 1 :(得分:5)
另一种LINQ方法,但没有使用string.Join
:
var result = new string(original.Distinct().ToArray());
老实说,我不知道字符串创建的哪种方法会更快。这可能取决于string.Join
在追加StringBuilder
之前是否最终在内部将每个元素转换为字符串,或者是否为某些众所周知的类型提供自定义支持以避免这种情况。
答案 2 :(得分:2)
怎么样
var result = string.Join("", "AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ".Distinct());
确保包含System.Linq
命名空间。
答案 3 :(得分:2)
试试这个
string str = "AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ";
string answer = new String(str.Distinct().ToArray());
我希望这会有所帮助。
答案 4 :(得分:2)
如果“AAABBBAAA”应返回“ABA”,则以下操作。虽然不是很快。
List<char> no_repeats = new List<char>();
no_repeats.Add(s[0]);
for (int i = 1; i < s.Length; i++)
{
if (s[i] != no_repeats.Last()) no_repeats.Add(s[i]);
}
string result = string.Join("", no_repeats);