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,然后依次判定,这样的代码会简短和精密许多。