今天的iOS面试上机题

作者: 红色小星 | 来源:发表于2016-03-10 23:32 被阅读1016次

今天去面试,有一道上机题,长时间不写字符串方法,竟然没做出来,丢人了,晚上补上,记录一下,大家有更好的方法欢迎回复。 本人菜鸟,大神勿喷啊。

题目(凭记忆):写一个方法,请将任意字符串中的"<" ">"最近的之间的内容删除,并返回其余的字符串;例如:

NSString * str1 = @"<hdadsdtmlsssss></dqdqw>4<5<//dwdq><uioq>";

返回 4 <5;

NSString *str2 = @"<dwqdwqdq>abc<dwdwdw>de<dddd>";

返回 abcde;

感谢“子达如何”提供的正确算法,答案看这里

防止误导读者,以下方法作废。

欢迎各位大神提供新算法(一定要加注释啊)···

我的解决方法:

- (NSString *)getEndStr:(NSString *)str

{

NSMutableString * mutStr = [[NSMutableString alloc]init];

NSArray *arr = [str componentsSeparatedByString:@">"];

for (int i = 0 ;i < arr.count; i ++) {

NSString * a = arr[i];

if (a.length > 0) {

if (![[a substringWithRange:NSMakeRange(0, 1)] isEqualToString:@"<"] ) {

for (NSInteger j =a.length ; j >0; j --) {

if ([[a substringWithRange:NSMakeRange(j - 1, 1)] isEqualToString:@"<"]) {

[mutStr appendString:[a substringToIndex:j - 1]];

break;

}

}

}

}

}

return mutStr;

}

相关文章

网友评论

  • grassxiao:写了一个,没有完整测试过
    +(NSString*)getSimpleString:(NSString*)str{
    NSMutableString* ret = [NSMutableString string];
    NSMutableArray* stack = [NSMutableArray array];

    for (NSUInteger i = 0; i < [str length]; i++) {
    NSString* tmp = [str substringWithRange:NSMakeRange(i, 1)];

    if(stack.count == 0){
    [stack addObject:[NSMutableString stringWithString:tmp]];
    }
    else{
    if([tmp isEqualToString:@"<"]){
    [stack addObject:[NSMutableString stringWithString:@"<"]];
    continue;
    }

    if([tmp isEqualToString:@">"]){
    [stack removeLastObject];
    continue;
    }

    NSMutableString* str = [stack lastObject];
    [str appendString:tmp];
    }
    }

    for (NSString* str in stack) {
    [ret appendString:str];
    }

    return [ret copy];
    }
  • 子达如何:由于回复不支持代码加亮,只好另开一个小文章:
    http://www.jianshu.com/p/714425c3f4a3
  • 子达如何:有或者对于这样的测试用例,期待输出是啥?
    @"<hdadsdtmlsssss>3<4<5</dqdqw>5>4>3<//dwdq><uioq"
  • 子达如何:初步看了一下算法还有很大的改进空间,可以免去很多中间字符串的复制,也就是说可以不需要任何额外的内存消耗
    子达如何:先提出个问题对于测试用例“@"<hdadsdtmlsssss></dqdqw>4>5<//dwdq><uioq>" 应该输出什么? 就是把原测试用例的4<5改成了4>5。 我的理解应该还是输出4>5, 但是按照你的解法, 结果是不对的?
    子达如何:@红色小星 先提出个问题对于测试用例“@"<hdadsdtmlsssss></dqdqw>4>5<//dwdq><uioq>" 应该输出什么? 就是把原测试用例的4<5改成了4>5。 我的理解应该还是输出4>5, 按时按照你的解法, 结果是不多的?
    红色小星: @子达如何 怎么改 可否提供算法 我想学习学习

本文标题:今天的iOS面试上机题

本文链接:https://www.haomeiwen.com/subject/pwlzkttx.html