题目要求:
/**
* 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则:
* 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
* 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
*
* 要求实现函数: void stringZip(const char *pInputStr, long lInputLen, char
* *pOutputStr);
*
* 【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr:
* 输出字符串,空间已经开辟好,与输入字符串等长;
*
* 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
*
* 示例 输入:“cccddecc” 输出:“3c2de2c” 输入:“adef” 输出:“adef” 输入:“pppppppp” 输出:“8p”
*
*/
代码实现
public class StringZip {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String input;
while (cin.hasNext()) {
input = cin.next();
if (!valid(input))
return;
// String temp = stringZip(input);
// System.out.println(temp);
stringZip2(input);
}
}
private static void stringZip2(String input){
char[] charArr = input.toCharArray();
int len=input.length();
int sum=1;
for (int i = 0; i < len-1; i++) {
if(charArr[i]==charArr[i+1]){
sum++;
if(i+1==len-1){
System.out.print(sum+""+charArr[i]);
}
}else{
if(i+1==len-1){
System.out.print(charArr[i]+""+charArr[i+1]);
}else if(sum!=1){
System.out.print(sum+""+charArr[i]);
}else{
System.out.print(charArr[i]);
}
sum=1;
}
}
}
private static String stringZip(String input) {
char[] charArr = input.toCharArray();
List<Character> charList = new ArrayList<Character>();
List<Integer> numList = new ArrayList<Integer>();
for (int i = 0; i < charArr.length - 1;) {
char temp = charArr[i];
int len = 1;
for (int j = i + 1; j < charArr.length; j++) {
if (temp == charArr[j]) {
++len;
if(j==charArr.length-1)
{
charList.add(temp);
numList.add(len);
i=j;
}
}else{
charList.add(temp);
numList.add(len);
i=j;
if(j==charArr.length-1){
charList.add(charArr[j]);
numList.add(len);
}
break;
}
}
}
StringBuilder sb=new StringBuilder();
for (int i = 0; i < numList.size(); i++) {
int num=numList.get(i);
char ch=charList.get(i);
if(num!=1){
sb.append(num).append(ch);
}else{
sb.append(ch);
}
}
return sb.toString();
}
private static boolean valid(String input) {
if (input == null || "".equals(input))
return false;
char[] charArr = input.toCharArray();
for (int i = 0; i < charArr.length; i++) {
char temp = charArr[i];
if (temp < 'a' || temp > 'z')
return false;
}
return true;
}
}