旧题新解
6. 传入一段字符串,把相同的字符按出现顺序,归在一起,并压缩(20分)
比如:输入: SamSameCome
输出: SSaammmeeCo
S2a2m3e2C1o1
返回值为压缩后的结果,比如S2a2m3e2C1o1
//测试代码
/*********************************************************************/
NSLog(@"6. 传入一段字符串,把相同的字符按出现顺序,归在一起,并压缩(20分)");
NSLog(@"传入字符串%@,归并后字符串为%@",@"SameSameCom",[Test compressString:@"SameSameCom"]);
/*********************************************************************/
//原来的解法
+ (NSString *)compressString:(NSString *)s
{
NSMutableArray *sa=[[NSMutableArray alloc] init];
NSMutableArray *sa1=[[NSMutableArray alloc] init];
//将字符串存入可变数组
for(int i=0;i<[s length];i++)
{
NSString *s1=[[NSString alloc] initWithFormat:@"%c",[s characterAtIndex:i]];
[sa addObject:s1];
}
//初始化第一个元素
[sa1 addObject:[sa objectAtIndex:0]];
[sa removeObjectAtIndex:0];
//遍历sa,一旦遇到与sa1相同的则移除,再次遍历,知道sa移空
while([sa count]!=0)
{
for (int j=0; j<[sa count]; j++)
{
if([[sa1 objectAtIndex:([sa1 count]-1)]isEqualTo:[sa objectAtIndex:j]])
{
[sa1 addObject:[sa objectAtIndex:j]];
[sa removeObjectAtIndex:j];
j=0;
}
}
//遍历完一次把一种相同字母放到一起,接下来存入sa开头的元素
if([sa count] !=0)
{
[sa1 addObject:[sa objectAtIndex:0]];
[sa removeObjectAtIndex:0];
}
}
//相同字母移动到一起存入sa1
int count=1;
int flag=0;
NSMutableArray *arr=[[NSMutableArray alloc] init];
for (int i=0; i<[sa1 count]; i++)
{
//判断最后一个元素是否与前一个元素相同
if(i==([sa1 count]-1))
{
if([sa1 objectAtIndex:i]!=[sa1 objectAtIndex:i-1])
{
[arr addObject:[sa1 objectAtIndex:i]];
[arr addObject:@"1"];
}
}
else
{
[arr addObject:[sa1 objectAtIndex:i]];
}
//count记录每个字母出现的次数,换到下一个字母时初始化为1
//flag标记是否遇到不同的字母,或所有字母是否读完
count=1;
flag=0;
for (int j=i; j<[sa1 count]-1; j++)
{
//判断相同字母总共有几个
if([[sa1 objectAtIndex:i] isEqualTo:[sa1 objectAtIndex:j+1]])
{
count++;
if(j+1==([sa1 count]-1))
{
flag++;
}
}
else
{
flag++;
}
//如果flag遇到不同的字母,或所有字母是否读完,把字母个数存入sa1
if(flag)
{
NSString *scount=[[NSString alloc] initWithFormat:@"%d",count];
[arr addObject:scount];
//如果j等于数组长度少1表明已经读取完毕
if(j!=[sa1 count]-1)
{
i=j;
}
break;
}
}
}
NSString *ss=[arr componentsJoinedByString:@""];
return ss;
}
//新解法
+ (NSString *)compressString:(NSString *)s
{
int arr[100]={};
for(int i=0; i<[s length]; i++)
{
arr[[s characterAtIndex:i]-'A']++;
}
NSMutableArray *mArr=[[NSMutableArray alloc] init];
for(int i=0;i<100;i++)
{
if(arr[i]!=0)
{
[mArr addObject:[NSString stringWithFormat:@"%c",(i+'A' )]];
[mArr addObject:[NSString stringWithFormat:@"%d",arr[i]]];
}
}
NSString *s1=[mArr componentsJoinedByString:@""];
return s1;
}