docs: public  float calc(String cSeq1,
  			String cSeq2) {
  		//+1 : 下标为0节点为动态规划的起点
  		// cSeq1.length >= cSeq2.length > 1
  		int xsLength = cSeq1.length() + 1; // > ysLength
  		int ysLength = cSeq2.length() + 1; // > 2
  
  		float[] lastSlice = new float[ysLength];
  		float[] currentSlice = new float[ysLength];
  
  		// first slice is just inserts
  		currentSlice[0]=0;
  		for (int y = 1; y < ysLength; ++y)
  			currentSlice[y] = currentSlice[y-1] + costIns(cSeq2.charAt(y-1)); // y inserts down first column of lattice
  
  		for (int x = 1; x < xsLength; ++x) {
  			char cX = cSeq1.charAt(x-1);
  			///////////exchange between lastSlice and currentSlice////////////
  			float[] lastSliceTmp = lastSlice;
  			lastSlice = currentSlice;
  			currentSlice = lastSliceTmp;
  			/////////////////////////////
  			currentSlice[0] = lastSlice[0]+costDel(cSeq1.charAt(x-1)); // x deletes across first row of lattice
  			for (int y = 1; y < ysLength; ++y) {
  				int yMinus1 = y - 1;
  				char cY = cSeq2.charAt(yMinus1);
  				// unfold this one step further to put 1 + outside all mins on match
  				currentSlice[y] = Math.min(cX == cY
  						? lastSlice[yMinus1] // match
  						            : costReplace(cX,cY) + lastSlice[yMinus1], // 替换代价
  						             Math.min(costDel(cX)+lastSlice[y], // 删除代价
  						            		costIns(cY)+currentSlice[yMinus1])); // 插入代价
  			}
  		}
  		return currentSlice[currentSlice.length-1];
  	}