求字符串所有重复两次以上字符

m1rf539w posted @ 2012年5月29日 08:51 in 数据结构与算法 , 1301 阅读
        static void Main(string[] args)
        {
            string mete = "aaaassdsfdgfezdxcrgrefsdfdsgdfdfdfsagdfbhdfbtfffgrrssdsdasfcccdghhh";
            int s=0;
            for (int i = 0, l = mete.Length; i < l; i=s)
            {
                 s= i;
                 int num = RecursionMaxRepate(mete, mete[i], ref s);
                if (num>1)
                {
                    Console.WriteLine("{0}:{1}", mete[i], num);
                }
            }
            Console.ReadKey();
        }

        static int RecursionMaxRepate(string m, char c, ref int s)
        {
            int sum = 0;
            if (c == m[s] && (s)<m.Length)
            {
                s += 1;
                if (s >= m.Length)
                {
                    return sum+1;
                }
                sum += RecursionMaxRepate(m, c, ref s) + 1;
            }
            else if(c!=m[s])
            {
                return sum;
            }

            return sum;
        }
        static void FetchRepate(string s)
        {
            for (int i = 0, l = s.Length; i < l; i++)
            {
                char c = s[i];
                int r = 0;
                int ii = i + 1;
                for (; ii < l; ii++)
                {
                    if (c == s[ii])
                    {
                        r++;
                    }
                    else
                    {
                        break;
                    }
                }
                if (r > 0)
                {
                    Console.WriteLine("{0}:{1}", c, r+1);
                    i = ii-1;
                }
            }
        }
Avatar_small
依云 说:
2012年5月29日 14:08

不明白。直接计数再 filter 不就好了么?

Avatar_small
m1rf539w 说:
2012年5月31日 10:19

@依云: 嗯,什么意思,我不太明白,还有,我用的是C#.

Avatar_small
依云 说:
2012年5月31日 11:55

@m1rf539w: 用 Haskell 的话是这样:(http://p.vim-cn.com/cKw/haskell )
import Control.Monad
import Data.List
import System.Environment (getArgs)

getManyChars = map fst . filter ((>1) . snd) . map getLength . group . sort
where getLength xs@(x:_) = (x, length xs)
main = print . getManyChars . head =<< getArgs

Python 是这样:(http://p.vim-cn.com/cKx/python )
#!/usr/bin/env python3
# vim:fileencoding=utf-8

import sys
from collections import defaultdict

def getManyChars(s):
countMap = defaultdict(int)
for i in s:
countMap[i] += 1
return [c for c, n in countMap.items() if n > 1]

if __name__ == '__main__':
print(getManyChars(sys.argv[1]))

以上代码如果缩进不正确请使用链接来查看。

Avatar_small
m1rf539w 说:
2012年5月31日 23:53

@依云: python看懂了,但是算法实现,还是不用List,Map之类的封装好的东西了.

Avatar_small
依云 说:
2012年6月01日 00:12

@m1rf539w: 哦,原来如此。不过,List 你都不用,那你用什么存放一系列对象呢?


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter