package com.lyk;
import java.util.HashMap;
/**
* @Date 2012-11-26
* @author LYJ
* @Function 统计字符串中每个字符出现的次数
*
*/
public class CountString {
int find(char []sc,int low,int high){
char key=sc[low];
while(low<high){
while(low<high&&(sc[high]+"").hashCode()>=(key+"").hashCode())
high--;
sc[low]=sc[high];
while(low<high&&(sc[low]+"".hashCode())<=(key+"").hashCode())
low++;
sc[high]=sc[low];
}
sc[low]=key;
return low;
}
void sort(char []sc,int low,int high){
if(low<high){
int j=find(sc, low, high);
sort(sc, low, j-1);
sort(sc, j+1, high);
}
}
String getCountUseSort(String source){
char []sc=source.toCharArray();
sort(sc, 0, source.length()-1);
String s;
char flag=sc[0];
int count =1;
StringBuilder countSbd=new StringBuilder();
for(int i=1;i<sc.length;i++)
{
if(sc[i]==flag){
count++;
}
else {
s=flag+""+count;
flag=sc[i];
count=1;
countSbd.append(s);
}
}
countSbd.append(flag+""+count);
return countSbd.toString();
}
String getCountUseMap(String source){
HashMap<Character, Integer> countMap=new HashMap<Character, Integer>();
char[]cr=source.toCharArray();
countMap.put(cr[0], 1);
for(int i=1;i<=cr.length-1;i++)
if(countMap.containsKey(cr[i]))
countMap.put(cr[i], countMap.get(cr[i])+1);
else
countMap.put(cr[i], 1);
String s=countMap.toString();
s=s.replaceAll("=", "").replace('{', ' ').replace('}', ' ').replace(',', ' ').replaceAll(" ", "");
return s.trim();
}
String getCoutUseHash(String source){
char []ch=source.toCharArray();
int size=findMaxHash(ch);
int []countAry=new int[size];
String []item=new String[size];
for(int i=0;i<=ch.length-1;i++)
{
int hsCode=(ch[i]+"").hashCode();
int len=hsCode-1;
countAry[hsCode-1]+=1;
item[len]=ch[i]+"";
}
StringBuilder sbd=new StringBuilder();
for(int i=0,len=countAry.length;i<len;i++){
if(countAry[i]!=0)
{
sbd.append(item[i]+""+countAry[i]);
}
}
return sbd.toString();
}
int findMaxHash(char []c){
int first=(c[0]+"").hashCode();
for(int i=1;i<=c.length-1;i++){
first=(c[i]+"".hashCode())>first?c[i]+"".hashCode():first;
}
return first;
}
public static void main(String[] args) {
System.out.println(new CountString().getCountUseSort("李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永克cc你你你爱cbabccc我爱你克cc你你你爱cbabccc我爱你我我我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你永克cc你你你爱cbabccc我爱你永aaaaaaaaaaaa克cc你你你爱cbabccc我爱你"));
System.out.println(new CountString().getCountUseMap("李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永克cc你你你爱cbabccc我爱你克cc你你你爱cbabccc我爱你我我我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你永克cc你你你爱cbabccc我爱你永aaaaaaaaaaaa克cc你你你爱cbabccc我爱你"));
System.out.println(new CountString().getCoutUseHash("李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永李永杰凹凸凹凸李永杰凹凸aaxxxxxxxx我我我李永杰a我我我b李永克cc你你你爱cbabccc我爱你克cc你你你爱cbabccc我爱你我我我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你我b李永克cc你你你爱cbabccc我爱你永克cc你你你爱cbabccc我爱你永aaaaaaaaaaaa克cc你你你爱cbabccc我爱你"));
}
}