string-算法设计字符串压缩问题

问题描述

算法设计字符串压缩问题
函数void CleanString(char str)的功能是删除字符串str中的所有数字字符和非字母字符,并将字符串压缩。
例如原字符串为:abcd12ef5ghij8#**yz,处理后的字符串为:abcdfghijyz。
要求:
1、不使用包括strlen在内的任何java语言库函数;
2、在原字符串上操作,不得开辟新的字符串空间;
3、算法复杂度尽量的好。
代码如下
求解释下第二个if是什么意思?为什么这样写?
if(i==0 && !(ch[0]>='a' && ch[0]<='z') || (ch[0]>='A' && ch[0]<='Z')){
ch[0]=ch[j];
}

 public class Test{    void CleanString(String str){        char ch[]=str.toCharArray();            int n=str.length();        int m=0;    for(int j=0i=0;j<n;j++){        if((ch[j]>='a'&& ch[j]<='z') || (ch[j]>='A'&& ch[j]<='Z')){            if(i==0 && !(ch[0]>='a' && ch[0]<='z') || (ch[0]>='A' && ch[0]<='Z')){                ch[0]=ch[j];            }            if(ch[i] !=ch[j]){                i++;                 ch[i]=ch[j];            }        }        m=i+1;    }    for(int j=0;j<m;j++){        System.out.print(ch[j]);    }}

解决方案

for (int i = 0j = 0; i < n; i++){
if ( ((ch[i] >= 'a' ) && (ch[i] <= 'z')) || (ch[i] >= 'A') && (ch[i] <= 'Z')){//ch[i]是字母
ch[j] = ch[i];//j的位置储存字母
j++;
}
}

解决方案二:
改成这个吧,上面那个没考虑输出的m
for (int i = 0; i < n; i++){
if ( ((ch[i] >= 'a' ) && (ch[i] <= 'z')) || (ch[i] >= 'A') && (ch[i] <= 'Z')){//ch[i]是字母
ch[m] = ch[i];//j的位置储存字母
m++;
}
}
for(int j=0;j<m;j++){
System.out.print(ch[j]);
}

时间: 2016-08-16
Tags: string算法

string-算法设计字符串压缩问题的相关文章

【字符串处理算法】字符串转换为整数的算法设计及C代码实现

一.需求描述 输入一个由数字构成的字符串,编写程序将该字符串转换为整数并输出. 例如,如果输入的字符串是"12345",那么输出的整数是12345.注意,不要使用C语言的库函数atoi.   二.算法设计 我们都知道,如果给定一个整数123,那么其表示方法是:123=1*100+2*10+3.也就是说,一个整数是由其各位上的数字按照位数求和组成的. 因此,这个需求的解决方法很简单,只要将字符串中的各位数字按照其位数相加就行了.在此过程中,要考虑一些特殊情况. 程序的总体流程如图1所示.

【字符串处理算法】字符串包含的算法设计及C代码实现

一.需求描述 给定一个长字符串和一个短字符串,编写程序判断短字符串中的所有字符是否都在长字符串中.如果是,则长字符串包含短字符串:反之,不包含. 为了尽量包含大多数情况,字符串中可以包含大小写英文字母.数字和各种标点符号,并且区分大小写字母. 下面举几个例子予以说明: 1.如果长字符串是"ABCDE",短字符串是"ADC",那么短字符串中的所有字符都在长字符串中,即长字符串包含了短字符串. 2.如果长字符串是"ABCDE",短字符串是"

【字符串处理算法】删除特定的字符的算法设计及C代码实现

一.需求描述 输入一个长字符串和一个短字符串,编写程序从长字符串中将在短字符串出现过的字符删除掉. 例如,长字符串为"1234abcd",短字符串为"3a",那么经程序处理之后的字符串为"124bcd":又如,长字符串为"good bye",短字符串为"obh",那么经程序处理之后的字符串为"gd ye".   二.算法设计 我们可以通过将长字符串中的字符逐个与短字符串中的字符相比较来判

基于Zlib算法的流压缩、字符串压缩源码

原文:基于Zlib算法的流压缩.字符串压缩源码 Zlib.net官方源码demo中提供了压缩文件的源码算法.处于项目研发的需要,我需要对内存流进行压缩,由于zlib.net并无相关文字帮助只能自己看源码解决.通过对SharpZipLib的demo研究,写出了Zlib.net的流压缩算法. 中间花费了不少的时间,应为通过Stream压缩出来的数据全是空的,呵呵,主要原因就是忽略了ZOutputStream.flush()和ZOutPutStream.close()方法.大家自己看吧.关于字符串压缩

【字符串处理算法】回文判断的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序判断这个字符串是否是回文串. 为了便于说明,设定输入的字符串分为中文字符串和非中文字符串两种.其中,中文字符串中仅包含中文字符,非中文字符串中不包含中文字符. 所谓回文串,是指正读和反读都一样的字符串.下面举几个例子予以说明: 1."level"是一个非中文字符的回文串,因为正读和反读都是"level". 2."Good"不是一个非中文字符的回文串. 3."我爱我"是一个中文字符的回文串,

【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现

一.需求描述 输入一个字符串,编写程序找出这个字符串中的最长连续字符,并求出其连续出现的次数. 例如,"123444445"中的最长连续字符是4,其连续出现的次数为5:"abcddef"中的最长连续字符是d,其连续出现的次数为2:"ab"中的最长连续字符是a,其连续出现的次数为1.   二.算法设计 我们可以采取逐个比较字符串中各个字符的办法来获取最长连续字符及其连续出现的次数.程序的总体流程如图1所示. 图1 程序的总体流程   三.特殊流程考

【字符串处理算法】获取最长公共子串的算法设计及C代码实现

一.需求描述 输入两个字符串,编写程序获取这两个字符串的第一个最长公共子串. 例如,输入的字符串为"abcdef"和"fecdba",那么这两个字符串的第一个最长公共子串为"cd".   二.算法设计 我们可以首先寻找两个字符串中的第一个相等的字符,然后分别向后移动来比较对应位置的字符是否相等. 即如果字符串1为"1234abcd",字符串2为"abd",那么首先发现字符串1中的第五个字符"a&q

汇编语言设计字符串加密解密算法

问题描述 汇编语言设计字符串加密解密算法 做一个字符串的加密解密 字符串可以定义成静态的数据段 也可以从键盘动态输入 尽量加上输出 输出加密后的字符 在输出解密后的字符与自己的作比较 ,最好用到宏和子程序

php字符串压缩方法比较

php 提供的字符串压缩方法有 1.gzcompress - Compress a string This function compress the given string using the ZLIB data format. 2.gzencode - Create a gzip compressed string This function returns a compressed version of the input data  compatible with the output