华为机试第一题[2016年8月18日上午]计算重复字符

来源:互联网 发布:夏俊峰案网络舆论 编辑:程序博客网 时间:2024/05/19 09:37

题目描述

输入一行字符,统计英文字母的个数,非英文字母直接掠过不统计

例如:输入:AAA^^^%ABBCd98n2

   输出:A4B2C1d1n1

首先我想说的是,草,自己的代码能力真渣!!!!!回来后自己写的,唉

其实这道题不难的,今天去华为,看到这个题后,觉得挺简单的,不一会就写好了,后来测试的时候却没有输出最后面的结果

通过这次面试我懂得了几个道理

1.一定要多练代码

2.一定给自己很大的压力,在这样下去,工作找不到了!

3.说说这道题的几个注意的地方

1.首先是判定第一个字符,因为上来不可能总是给你范围内的,万一是范围外的呢

2.核心思想是,引用current一直往前遍历,引用pre记录上一次记录的英文字母,注意,我们在遍历的时候会过滤到非英文字符,

特别是最后的时候,把pre加入到buffer里面,而不是current,因为current已经跳出循环了,不能保证此时的current

还是英文字母了

下面给出所有情况的测试用例

##2ww3wNNiL11  输出  w3N2i1L1

2ww3wNNiLL       输出  w3N2i1L2

ww3wNNiL1        输出   w3N2i1L1


import java.util.Scanner;public class StringSplit { public static void main(String[] args){ Scanner input = new Scanner(System.in); StringBuffer sb = new StringBuffer(); while(input.hasNext()){ String line = input.nextLine(); sb = new StringBuffer(); int j=0; int count=1; char pre = line.charAt(j); while(j<line.length()){ pre = line.charAt(j);  if(pre>='a'&&pre<='z'||pre>='A'&&pre<='Z'){ break; }else{ j++; } } //从1号位置开始对字符串进行遍历, for(int i=j+1;i<line.length();i++){ char current = line.charAt(i); if(current>='a'&¤t<='z'||current>='A'&¤t<='Z'){ if(current==pre){ count++; }else{ sb.append(pre).append(count); count=1; pre = current; } } }         sb.append(pre).append(count); System.out.println(sb.toString()); } }}

0 0
原创粉丝点击