如何去掉重复字符,求最佳解决办法. ( 积分: 50 )

  • 主题发起人 主题发起人 bnbchinafbi
  • 开始时间 开始时间
提一个思路,原串保留, 再定义一个 字符串变量, 在原串中一个字符一个字符循环,循环一个字符看在不在定义的变量字符中,若不在就加到定义的变量串中,结果就是定义的变量串.
 
所谓"全文检索"就是将文本切分成各种关键字串的组合, 然后将所有关键字串排序建立索引. 检索的只是索引. 全文检索的难点就是如何切分原文. 比如最简单的建立索引方式下,
原文abcdefg就可以切分出: a, ab, abc, abcd, abcde, ..., b, bc, bcd, ....等各种索引关键字. 至于排序那就简单多了, 一般都是用B+树来实现.
 
如果不考虑非连续重复的话(abcdabcd) chenybin的是最佳方案
procedure TForm1.Button1Click(Sender: TObject);
procedure Del(var s: WideString);
var
I : Integer;
begin
for I := Length(S) downto 0 do
if s = s[i-1] then Delete(s, i , 1);
end;
var
s: widestring;
begin
s := 'aaaaaaaaabbccccccddeeffffffffffff1';
Del(s);
ShowMessage(s);
end;

佩服
 
abacdce
算法如下
倒着进行
abacdce读取最后一个'e',在前面去寻找'e',如果能找到,就删除最后一个'e';
得到新的字符串,如果没有找到,就倒着再看下一个字符‘c‘,就这样循环,
可以得到符合要求的字符串,并能保持原来出现的顺序。
对于上面的字符串,但不操作示意:
1,abacdce,倒e
2,abacdce,倒c,c重复,去掉当前c,得到abacde;
3,abacde,倒d,没有发现
4,abacde,倒c,没有发现
5,abacde,倒a,a重复出现,删除当前a,得到abcde;
6,abcde,倒b,没有发现
7,abcde,倒a,没有发现,并且到尽头,结束,得到最终字符串 abcde,顺序也保证!
算法清楚了没有?很好实现的!!!
 
上面我的方法是通用的,对于任何情况都可以实现,如果不保证顺序,当然可以
正向进行,方便一些,但结果会变成bacde.有差别的!
 
Johnny_du后来的方法最简洁,Demogodyou的也不错.
非常感谢大家的帮助和关注.
结贴发分了,分少了点.不好意思,呵呵.
 
发分不周道的地方请见谅.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
687
import
I
后退
顶部