+ -
当前位置:首页 → 问答吧 → 继续:一道Google笔试题目

继续:一道Google笔试题目

时间:2010-11-01

来源:互联网

其实那个帖子都有错LZ没做认真测试就结了, perl比较怂也就举几个反例
至于我那个少处理一个情况:
1-1-1.jpg
1-1-2.jpg
2.jpg
脚本通过,但是第2个1的存在是非法的,因为同列中只存在1。
正确的应该是:
1-1-1.jpg
1-1-2.jpg
1-2.jpg
2.jpg
即同列中不可以只存在1,至少要到2。
但是下面的是正确的。
1-1-1.jpg
1-1-2.jpg
因为用户可以留着以后命名嘛,不然每次屁股后面都得跟个2= =

下面是修改后的脚本:
Python code

#coding=utf-8
import re;
import os;
import os.path;

#从路径path下提取文件名并格式化
def FormatFileNames(path):

    files = [_f for _f in os.listdir(path) if os.path.isfile(os.path.join(path, _f))];
    formattedNames = {};
    for _f in files:
        all = re.findall(r"\d+", _f);
        all = [int(_i) for _i in all];
        formattedNames[tuple(all)] = _f;

    keys = sorted(formattedNames);
    formattedNames = [(formattedNames[_i], _i) for _i in keys];
    return formattedNames;

#检查文件名合法性
def CheckFileNames(formattedNames):

    fn = formattedNames;
    if(fn and fn[0][1].count(1) != len(fn[0][1])): return 0;

    for _fni in range(1, len(fn)):
        seqPre, seqCur = fn[_fni-1][1], fn[_fni][1];
        seqPreLen, seqCurLen = len(seqPre), len(seqCur);
        minSeqLen = min(seqPreLen, seqCurLen);
        for _si in range(minSeqLen):
            if(seqCur[_si] - seqPre[_si] == 1):
                for _ci in range(_si + 1, seqCurLen):
                    if(seqCur[_ci] != 1): return _fni;
                if(_si != seqPreLen - 1):
                    for _pi in range(_si + 1, seqPreLen):
                        if(seqPre[_pi] == 1): return _fni;
                break;
        else:
            return _fni;

    return None;


mypath = "f:/testtest/";
formattedNames = FormatFileNames(mypath);
res = CheckFileNames(formattedNames);
if(res != None):
    print("invalid filename: ", formattedNames[res][0]);
else:
    print(":)");



算法比较机械,期待另人大囧的奇淫意巧。

作者: I_NBFA   发布时间: 2010-11-01

原帖地址http://topic.csdn.net/u/20101101/13/6210b296-f58d-4e90-a784-e5b46e8c3fd4.html

作者: I_NBFA   发布时间: 2010-11-01

地址是这个,cc又蛋疼了。
http://topic.csdn.net/u/20101029/19/ba0666f9-65f6-495b-9be8-21ae4ce9d03b.html

作者: I_NBFA   发布时间: 2010-11-01