http://www.oschina.net/code/snippet_192190_16605 請找出輸入文件 (input.txt) 中全部符合下面條件的字符 1. 是一個小寫字母, 而且, 2. 兩側各有且只有三個大寫字母. 例如: aAAAxAAAa 中的 x 要求及說明: 1. 不能使用正則表達式; 2. 請儘可能優化代碼結構和算法性能; 3. 能適應更大規模的數據源(input.txt); 提示: 1. 輸出的結果是有語義的字符串.
-------------------------------------------------------------------------------- php
簡單地用php實現了下.. 正則表達式
返回的結果是linkedlist 算法
個人思路比較簡單,就是9個字符9個字符地遍歷,看是否符合那規則.既然人家不讓用正則表達式判斷. shell
那我們就用判斷大小寫的方法咯:-) 函數
固然以下不考慮任何效率問題.. 性能
<?php /** * @author 林少能 新浪圍脖:http://weibo.com/10832126 */ //--保存結果字符串 $res = ''; //--拼接每一行的字符串 $allStr = ''; $data = explode ( "\n", file_get_contents ( 'input.txt' ) ); if (is_array ( $data ) && count ( $data ) > 0) { foreach ( $data as $key => $val ) { $val = trim( $val ); $allStr .= $val; } //把最前面的8個字符串接到最後面,假設是一個環組成的字符串 $pre8Str = substr( $data[0], 0, 8 ); $allStr .= $pre8Str; } //--每9個字符9個字符地遍歷字符串 $strLen = strlen( $allStr ); for( $i=0;$i<$strLen;$i++ ){ $checkStr = substr( $allStr, $i, 9 ); $res .= checkIfXXOO( $checkStr ); } //輸出結果 echo $res; //-------------函數----------------- //判斷那幾個字是否符合這XXOO規則 function checkIfXXOO($str) { $str1 = substr ( $str, 0, 1 ); $str2_4 = substr ( $str, 1, 3 ); $str5 = substr ( $str, 4, 1 ); $str6_8 = substr ( $str, 5, 3 ); $str9 = substr ( $str, 8, 1 ); //簡單判斷字符串是否aAAAxAAAa的規則 if (! checkChar ( $str1 ) && checkChar ( $str2_4 ) && ! checkChar ( $str5 ) && checkChar ( $str6_8 ) && ! checkChar ( $str9 )) { return $str5; }else{ return ''; } } //判斷是不是大寫 function checkChar($str) { if (strtoupper ( $str ) === $str) { return true; } else { return false; } }運行一下,結果以下:
D:\www\htdocs\test>php input.php linkedlist