posts - 0, comments - 77, trackbacks - 0, articles - 356
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

省空间去保存这个字符串

Posted on 2008-04-24 16:15 semovy 阅读(256) 评论(0)  编辑  收藏 所属分类: JAVA基础

package com.semovy.test;

 

/*面试题
 * 一个字符串有N个从'a~z'用byte[N]表示,计划如何节省空间去保存这个字符串?
 */
public class StringTest {
 public static void main(String[] args) {
  String str = "XAAABBCCCFFGGTTTKKabccccddddeeefffggzzzeeseeeseaa";
  byte[] buf= str.getBytes();//题意
  //创建至少足够的二维存储器,元素第一索引放字符的asii,元素第二索引放字符的数目
  byte[][] nbuf = new byte[buf.length][2];
  int count = 0;//相间除重复之后的字母数目
  int flag = 0;//标志,0表示不重复,1表示重复
  for(int i=0;i<buf.length;i++)
  {
   if(i != buf.length-1 && buf[i] == buf[i+1])//非最后一个并有重复时
    flag = 1;
   else
    flag = 0;
   
   if(i== 0)//第一个直接接收
   {
    nbuf[0][0] = buf[i];
    nbuf[0][1] = 1;
   }
   if(flag == 0)//不重复
   {
    nbuf[count++][0] = buf[i];
    nbuf[count][1] = 1;
   }
   else//重复
   {
    nbuf[count][0] = buf[i];
    nbuf[count][1] ++;
   }
  }
  //存储和显示  
  StringBuffer sb = new StringBuffer();
  for(int i=0;i<count;i++)
  {
   sb.append(nbuf[i][1]);
   sb.append((char)nbuf[i][0]);
  }
  System.out.print(sb.toString());
 }
}
运行结果:

1X3A2B3C2F2G3T2K1a1b4c4d3e3f2g3z2e1s3e1s1e2a


只有注册用户登录后才能发表评论。


网站导航: