http://www.oschina.net/code/snippet_192190_16605 请找出输入文件 (input.txt) 中所有符合下面条件的字符 1. 是一个小写字母, 并且, 2. 两侧各有且只有三个大写字母. 例如: aAAAxAAAa 中的 x 要求及说明: 1. 不能使用正则表达式; 2. 请尽量优化代码结构和算法性能; 3. 能适应更大规模的数据源(input.txt); 提示: 1. 输出的结果是有语义的字符串.
--------------------------------------------------------------------------------
简单地用php实现了下..
返回的结果是linkedlist
我的思路比较简单,就是9个字符9个字符地遍历,看是否符合那规则.既然人家不让用正则表达式判断.
那咱们就用判断大小写的方法咯:-)
当然如下不考虑任何效率问题..
<?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