免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4605 | 回复: 25
打印 上一主题 下一主题

[学习共享] shell 编程 [复制链接]

论坛徽章:
1
2015亚冠之山东鲁能
日期:2015-05-11 13:22:53
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-10 11:42 |只看该作者 |倒序浏览
楼主刚刚笔试的一道题,还是想上来问问解法:

给出一个字符串:aodhpdona  判断该字符串中最先重复两次的字符,输出该字符。

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [报告]
发表于 2014-09-10 11:51 |只看该作者
回复 1# linux小小菜鸟
  1. echo "aodhpdona"|awk '{l=split($0,a,"");for(i=1;i<=l;i++)if(++b[a[i]]==2){print a[i];exit}}'
  2. d
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2014-09-10 11:58 |只看该作者
  1. echo aodhpdona | awk -F '' '{for(i=0;i++<NF;)if(a[$i]++){print $i;exit}}'
复制代码

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
4 [报告]
发表于 2014-09-10 12:10 |只看该作者
  1. echo aodhpdona|fold -1|awk 'a[$0]++==1{print $0;exit}'
复制代码

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
5 [报告]
发表于 2014-09-10 12:13 |只看该作者
  1. <?php
  2. $str = "aodhpdona";
  3. $arr=preg_split("//", $str);
  4. foreach ($arr as $k => $v) {
  5.    if(!empty($v)){
  6.       if(++$sum[$v]==2) {
  7.          echo $v;
  8.          break;
  9.        }
  10.    }
  11. }
  12. ?>
复制代码
结果:
d
[Finished in 0.2s]

论坛徽章:
0
6 [报告]
发表于 2014-09-10 12:14 |只看该作者
echo "aodhpdona" | awk -F "" '{for(i=1;i<=NF;i++){a[$i]++;if(a[$i]==2){print $i;exit}}}'

回复 1# linux小小菜鸟


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
7 [报告]
发表于 2014-09-10 12:17 |只看该作者
楼上 全是一种思路 ,分割 字符串为关联数组,以每隔字符数组的下标,数组的值 第一个达到2的 就是 最先重复的 字符,有时间写个 复杂的

论坛徽章:
1
2015亚冠之山东鲁能
日期:2015-05-11 13:22:53
8 [报告]
发表于 2014-09-10 12:38 |只看该作者
回复 2# Herowinter
我能问一下l=split($0,a,"")这部分split前面l=是什么意思吗?

   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
9 [报告]
发表于 2014-09-10 12:42 |只看该作者
本帖最后由 这个冬天不冷 于 2014-09-10 12:43 编辑
reb00t 发表于 2014-09-10 12:13
结果:
d
[Finished in 0.2s]
  1. <?php
  2. $str = 'aodhpdona';
  3. $res = array();
  4. $len = strlen($str);
  5. for($i=0;$i<$len;$i++){
  6.         $tmp =  substr($str, $i+1);
  7.         $index = strpos($tmp, $str[$i]);
  8.         if($index === false){
  9.                 continue;
  10.         }else{
  11.                 $res[$str[$i]][] = $index;
  12.         }
  13. }
  14. $t = array();
  15. foreach($res as  $key => $v){
  16.         $t[$key] = min($v);
  17. }
  18. asort($t);

  19. print_r($t);
  20. [root@localhost ~]# php test.php
  21. Array
  22. (
  23.     [d] => 2
  24.     [o] => 4
  25.     [a] => 7
  26. )
复制代码
我的思路是 求 两个重复字符之间的 间距

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
10 [报告]
发表于 2014-09-10 12:44 |只看该作者
回复 8# linux小小菜鸟


    简单的 赋值操作, 把 split 函数返回的值 赋给 l
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP