`
lovnet
  • 浏览: 6709417 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

java算法:字符串

 
阅读更多

java算法:字符串

在C语言和其他语言中,串指的是长度变化的字符数组,有一个起始点和一个标识串结束的终止符。在Java中,串是具有内嵌语言支持的高级抽象结构,它的表示是隐藏的。

串是具有价值的数据结构,因为一些计算方面的应用会应用到文本数据,可以直接使用串来表示,可以直接、有效地访问内存字节,而内存字节对应着串中的字符。即,大多数情况下,串抽象结构与应用的需求相匹配,并能充分利用机器的能力。

例一:串查找

Java代码 复制代码
  1. publicstaticintcountMatches(Stringpattern,Stringsource){
  2. intcnt=0;
  3. intM=pattern.length();
  4. intN=source.length();
  5. if(M>N){
  6. return0;
  7. }
  8. for(inti=0;i<N;i++){
  9. intj;
  10. for(j=0;j<M;j++){
  11. if(i+j<N){
  12. if(source.charAt(i+j)!=pattern.charAt(j)){
  13. break;
  14. }
  15. }else{
  16. break;
  17. }
  18. }
  19. if(j==pattern.length()){
  20. cnt++;
  21. }
  22. }
  23. returncnt;
  24. }

串的查找,它所花的时间与串的长度成正比。

如果source足够长,那么这段代码运行速度变慢,效率低下,这类问题可称为性能臭虫。因为经验验证程序代码的正确性,但是运行起来并不是我们所期望的。因此在研究有效算法之前,必须消除这类性能错误。

例二:串处理

Java代码 复制代码
  1. publicstaticStringsqueeze(Strings){
  2. char[]a=s.toCharArray();
  3. intN=1;
  4. for(inti=1;i<a.length;i++){
  5. a[N]=a[i];
  6. if(a[N]!=''){
  7. N++;
  8. }elseif(a[N-1]!=''){
  9. N++;
  10. }
  11. }
  12. returnnewString(a,0,N);
  13. }

返回一个串,除了把串中的连续空白符替换成单个空白符,其它与原串相同。

由于串是变化的,因此串的内存分配要比链表的内存分配难得多;但java系统再一次考虑了所有细节。事实上,一个为串预留空间的一般机制与所有的java对象所需要的一般内存分配机制是差不多的。通常当我们使用串时,串的内存分配问题并不像串第一次出现时那么重要,因为我们经常使用的是串的引用,而不是字符串本身。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics