Posted on 2008-04-24 16:15
semovy 阅读(258)
评论(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