明镜止水

知行合一

统计

留言簿

阅读排行榜

评论排行榜

字符串自动机的思考——从百度之星E题谈起

2012百度之星的E题吧,因为之间没准备,卡在这道水题上,程序一直wrong answer。

昨晚找人讨论了字符串的问题,写一点思考出来。

E题的大意是:c变量名风格是小写字母带下划线,比如:long_an,Java变量名是首字母小写,其后每个单词首字母大写。

但是在判定逻辑时,我对有些情况有疑惑:

1.双下划线,__exit,file__exit

2.首字符下划线,_exit

3.末尾字符下划线,__exit_

4.java这样的变量名:bAIDU

其实,以上这些情况都是合法的,比如双下划线,在调用某些系统函数时,经常遇到。这些都是琐碎逻辑的问题。

按照水题的标准来说,应该可以对c风格变量名的字符串使用strlwr和strcmp函数,直接比较即可得出。java的变量名判定就要容易一些,E题过的人代码都比较短,大概是这样做的吧。

晚上找同学讨论,他告诉我说字符串处理都可以用自动机来实现,这是收获颇丰的一点,比如上面的E题。

起始0状态遇到大写字母直接终结,遇到小写字母和下划线进入下一个状态1,然后依次判定,这样的代码会简短和精密许多。

posted on 2012-06-01 16:39 寒璿 阅读(238) 评论(1)  编辑 收藏 引用

评论

# re: 字符串自动机的思考——从百度之星E题谈起 2012-06-02 13:17 老易

E表示过了...
百度的例子是那样 俺们只能遵守
在Java中一个多个单词构成的变量名应该按照如下格式命名:第一个单词的开头用小写字母,其余单词都以大写字母开头,单词与单词之间不加分隔符,除单词的首字母之外的字母一律使用小写。例如:javaIdentifier, longAndMnemonicIdentifier, name, bAIDU.
与Java不同C++的命名全都使用小写字母,在单词和单词之间使用“_”来作为分隔符。例如:c_identifier, long_and_mnemonic_identifier, name (当名字中只有一个单词的时候,Java与C++的命名是相同的), b_a_i_d_u.
遍历测试是否双"_" if (num[i]=='_' && num[i+1]=='_')
前后是否为"_" if(num[Strlen(num)-1]=='_' || num[0]=='_')
前是大写还是小写 if(num[0]<91)
基本就这样  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理