判断是否回文字符串 aabbaa 依然 aabbaa,abcba
思路
- 从左到右、从右到左遍历,左小于右的情况,char是否相等即可。
/*
判断是否回文字符串
**/
+ (BOOL)isPanlinedorm:(NSString *)str {
if (![str isKindOfClass:[NSString class]] && str.length > 0) {
return NO;
}
int l = 0;
int r = (int)str.length - 1;
while (l < r) {
char lString = [str characterAtIndex:l];
char rString = [str characterAtIndex:r];
if (lString != rString) {
return NO;
}
l++;
r--;
}
return YES;
}
判断一个字符串是否为另一个的子字符串 abcdefg abcd,abcd是abcdefg的子串
思路
- 先判断字符串是否为空,满足条件判断子字符串是否大于主字符串
- 截取主字符串,长度为子字符串长度。遍历比较
/**
判断是否子字符串
*/
+ (BOOL)isMainStr:(NSString *)mainStr containStr:(NSString *)str {
if (!(mainStr.length > 0 && str.length > 0)) {
return NO;
}
if (str.length > mainStr.length) {
return NO;
}
int length = (int)mainStr.length - (int)str.length;
BOOL result = NO;
for (int i = 0; i<length; i++) {
if ([str isEqualToString:[mainStr substringWithRange:NSMakeRange(i, str.length)]]){
result = YES;
}
}
return result;
}
RLE算法
/**
RLE算法 输入aaabbccc输出a3b2c3
*/
+ (NSString *)RLEstr:(NSString *)str {
int cnt = 1;
for (int i = 0; i<str.length-1; i++) {
char a = [str characterAtIndex:i];
char b = [str characterAtIndex:i+1];
if (a == b) {
cnt++;
}else{
NSLog(@"%c-%d",a,cnt);
cnt = 1;
}
}
return @"end";
}