LeetCode第五題:給定一個(gè)字符串 s,找到 s 中最長(zhǎng)的回文子串令野。你可以假設(shè) s 的最大長(zhǎng)度為 1000轻专。
示例 1:
輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個(gè)有效答案王财。
#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) {//偶數(shù)字符串
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 {//奇數(shù)字符串
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) {//將最長(zhǎng)字符串賦值給max
if (string.length > maxString.length) {
maxString = string;
}
}
NSLog(@"最長(zhǎng)回文字符串---%@",maxString);
}
return 0;
}