LeetCode第五题:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString* s = @"bcaddad";
NSMutableArray* marray = [NSMutableArray array];
for (int i = 0; i < s.length; i++) {//获取收尾同字母字符串
NSString* iletter = [s substringWithRange:NSMakeRange(i, 1)];
for (int m = i+1; m<s.length; m++) {
NSString* letter = [s substringWithRange:NSMakeRange(m, 1)];
if ([iletter isEqualToString:letter]) {
NSString* substring = [s substringWithRange:NSMakeRange(i, m-i+1)];
[marray addObject:substring];
}
}
}
NSMutableArray* marray_2 = [marray mutableCopy];
for (NSString* string in marray) {//筛选出回文字符串
if (string.length%2 == 0) {//偶数字符串
for (int i = 1; i < string.length/2; i++) {
NSString* s_1 = [string substringWithRange:NSMakeRange(i, 1)];
NSString* s_2 = [string substringWithRange:NSMakeRange(string.length-1-i, 1)];
NSLog(@"s1-s2---%@-%@",s_1,s_2);
if (![s_1 isEqualToString:s_2]) {
[marray_2 removeObject:string];
}
}
}
else {//奇数字符串
for (int i = 1; i < string.length+1/2; i++) {
NSString* s_1 = [string substringWithRange:NSMakeRange(i, 1)];
NSString* s_2 = [string substringWithRange:NSMakeRange(string.length-1-i, 1)];
NSLog(@"s1-s2---%@-%@",s_1,s_2);
if (![s_1 isEqualToString:s_2]) {
[marray_2 removeObject:string];
}
}
}
}
NSLog(@"首尾同字母字符串---%@",marray);
NSLog(@"回文字符串---%@",marray_2);
NSString* maxString = @"";
for (NSString* string in marray_2) {//将最长字符串赋值给max
if (string.length > maxString.length) {
maxString = string;
}
}
NSLog(@"最长回文字符串---%@",maxString);
}
return 0;
}