求一个重复字符串替换算法!!!

jeanso 2009-09-09 09:46:46
替换重复的字符 1,2,3,23,3,24,34,23,3-->1,2,23,3,24,34 (3、23有重复的就去掉重复的保留一个)

我想到的是转换成字符串数组,定义一个输出字符变量,做内外两个循环,判断取出的字符与后面是否存在相等的,有,则不添加到输出字符;无-则添加。最后,返回这个输出字符变量就是要得结果。不过,感觉算法不是太优化。
...全文
118 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeanso 2009-09-09
  • 打赏
  • 举报
回复
太感谢了 越高级越简单,但是基础的算法越容易理解越本质
结帖咯~!
xuyang09 2009-09-09
  • 打赏
  • 举报
回复
嗯, 小算法体现不同的思路啊
xzq686 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 webdiyer 的回复:]
用Linq:

int[] arrs=new int[]{1,2,3,23,3,24,34,23,3};
int[] finalArr=arrs.Distinct().ToArray();
[/Quote]
顶..需要.net3.0以上支持..
需要项目添加引用System.Core
才能using System.Linq;
Aderlee 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aderlee 的回复:]
引用 5 楼 webdiyer 的回复:
用Linq:

int[] arrs=new int[]{1,2,3,23,3,24,34,23,3};
int[] finalArr=arrs.Distinct().ToArray();

就是这个方法。不用循环再把distinct之后的数据作为字符串显示:

Response.Write(string.Join(",",finalArr));
[/Quote]
用字符串数组
string str = "1,2,3,23,3,24,34,23,3";
string[] arrr = str.Split(',').Distinct().ToArray();
Response.Write(string.Join(",",arrr));
Aderlee 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 webdiyer 的回复:]
用Linq:

int[] arrs=new int[]{1,2,3,23,3,24,34,23,3};
int[] finalArr=arrs.Distinct().ToArray();
[/Quote]
就是这个方法。不用循环再把distinct之后的数据作为字符串显示:

Response.Write(string.Join(",",finalArr));
xzq686 2009-09-09
  • 打赏
  • 举报
回复

string st = "1,2,3,23,3,24,34,23,3";
string[] stArr = st.Split(',');
ArrayList al = new ArrayList();
foreach (string str in stArr)
{
if(!al.Contains(str))
al.Add(str);
}
st = "";
for (int i = 0; i < al.Count; i++)
{
st += al[i] + ",";
}
st = st.Substring(0, st.Length - 1);
webdiyer 2009-09-09
  • 打赏
  • 举报
回复
用Linq:

int[] arrs=new int[]{1,2,3,23,3,24,34,23,3};
int[] finalArr=arrs.Distinct().ToArray();
  • 打赏
  • 举报
回复

static void Main()
{
string st = "1,2,3,23,3,24,34,23,3";
string[] str = st.Split(',');
List<string> list = new List<string>();
for (int i = 0; i < str.Length; i++)
{
if (list.IndexOf(str[i].ToString()) == -1) //包含则不添加
{
list.Add(str[i]);
}
}
foreach (string i in list)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
keanulaw 2009-09-09
  • 打赏
  • 举报
回复
这个应该就是楼主的意思,不过好像这种方法挺合适了,不知道还有没有更好的方法,期待高手!
[Quote=引用 2 楼 gwf25sz 的回复:]
C# codestring st="1,2,3,23,3,24,34,23,3";string[] str= st.split(',');string answer="";for(int i=0;i< str.length ;i++)
{for(int j= i+1;j< str.length ;j++)
{if(str[i]!= str[j])
{
ans¡­
[/Quote]
gwf25sz 2009-09-09
  • 打赏
  • 举报
回复
string st = "1,2,3,23,3,24,34,23,3";
string[] str = st.split(',');
string answer = "";
for(int i = 0;i< str.length ;i++)
{
for(int j = i+1;j < str.length ;j++)
{
if(str[i] != str[j])
{
answer += str[j] + ",";
}
}
}

answer = answer.subString(0,answer.length -1);
randomfeel 2009-09-09
  • 打赏
  • 举报
回复
我也只能想到这种办法
不知道怎么样写能更优化

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧