分析" aAAAxAAAa"字符串

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
相關文章
相關標籤/搜索