zoukankan      html  css  js  c++  java
  • 使用类目删除可变字符串中重复字母的一个算法

    问题:为可变字符串类添加一个检测是不是有重复字母的方法:例如:@“abccd”调用这个函数后变成@”abcd”

    思路:1.应用类目(Category)为NSMutableString添加一个方法;

       2.找到字符串中重复字母并删除其中重复字母的算法:

        (1)遍历字符串,提取相邻的字母进行比较;

        (2)通过API提供的方法删除处在较后位置的重复字母;

        (3)注意可变字符串删除字母后字符串长度的变化。

    代码:

    //新建一个NSMutableString类的类目,类目的声明文件

    #import <Foundation/Foundation.h> 

    @interface NSMutableString (DeleteRepeatLetter) 

    // 编写一个删除重复字母的方法

    -(void)deleteRepeate:(NSMutableString *)aMstr; 

    @end

    // 类目的实现文件

    #import "NSMutableString+DeleteRepeatLetter.h" 

    @implementation NSMutableString (DeleteRepeatLetter) 

    -(void)deleteRepeate:(NSMutableString *)aMstr

    {

      // 使用self.length在循环的时候时刻检测字符串的长度

        for (int i = 0; i < self.lngth; i++)

        {

            char p = [aMstr characterAtIndex:i];

            for (int j = i+1; j < self.length; j++)

            {

                char q = [aMstr characterAtIndex:j];

                if (p == q)

                {

                    [aMstr deleteCharactersInRange:NSMakeRange(j, 1)];

                    j--;  // 为保证 j++后指向一致,所以要j--,因为删除字母后后面的字母会往前提

                }

            }

        }

    @end

    // 在主函数中

    #import "NSMutableString+DeleteRepeatLetter.h" // 导入类目

    NSMutableString * str = [NSMutableStringstringWithString:@"aabbccddee"];

        [str deleteRepeate:str];

        NSLog(@"%@",str);

  • 相关阅读:
    uva 11294 Wedding
    uvalive 4452 The Ministers’ Major Mess
    uvalive 3211 Now Or Later
    uvalive 3713 Astronauts
    uvalive 4288 Cat Vs. Dog
    uvalive 3276 The Great Wall Game
    uva 1411 Ants
    uva 11383 Golden Tiger Claw
    uva 11419 SAM I AM
    uvalive 3415 Guardian Of Decency
  • 原文地址:https://www.cnblogs.com/Songxin/p/3544928.html
Copyright © 2011-2022 走看看