java算法:字符串

java算法:字符串

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

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

例一:串查找

Java代码 复制代码
  1. public static int countMatches(String pattern, String source){   
  2.     int cnt = 0;   
  3.     int M = pattern.length();   
  4.     int N = source.length();   
  5.     if(M > N){   
  6.         return 0;   
  7.     }   
  8.     for (int i = 0; i < N; i++) {   
  9.         int j;   
  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.     return cnt;   
  24. }  
public static int countMatches(String pattern, String source){
	int cnt = 0;
	int M = pattern.length();
	int N = source.length();
	if(M > N){
		return 0;
	}
	for (int i = 0; i < N; i++) {
		int j;
		for(j = 0; j < M; j++){
			if(i + j < N){
				if(source.charAt(i + j) != pattern.charAt(j)){
					break;
				}
			}else{
				break;
			}
		}
		if(j == pattern.length()){
			cnt++;
		}
	}
	return cnt;
}

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

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

例二:串处理

Java代码 复制代码
  1. public static String squeeze(String s){   
  2.     char [] a = s.toCharArray();   
  3.     int N = 1;   
  4.     for(int i = 1; i < a.length; i++){   
  5.         a[N] = a[i];   
  6.         if(a[N] != ' '){   
  7.             N++;   
  8.         }else if(a[N - 1] != ' '){   
  9.             N++;   
  10.         }   
  11.     }   
  12.     return new String(a, 0, N);    
  13. }  
public static String squeeze(String s){
	char [] a = s.toCharArray();
	int N = 1;
	for(int i = 1; i < a.length; i++){
		a[N] = a[i];
		if(a[N] != ' '){
			N++;
		}else if(a[N - 1] != ' '){
			N++;
		}
	}
	return new String(a, 0, N); 
}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值