华为机试题---已知:yi er san si wu liu qi ba jiu 分别对应123456789

原创 2014年03月10日 00:12:33

一、题目

* 功能描述:已知:yi er san si wu liu qi ba jiu 分别对应123456789, 对一段只含有这几种字符串的字符串进行转换,如:
 * 输入:yiersansan 输出:1233

二、思路分析

1. 思路分析
 * 首先要解决三个问题:
 * 第一、怎么存储常量字符串和数据对应关系。
 * 第二、如何分割对于输入的字符串,获得出有数字对应的子字符串。
 * 第三、 如何对子字符串进行匹配,寻找下一个。

三、算法分析


 *  第一、怎么存储常量字符串和数据对应关系。
 * 由于看到是字符串和数字是一一对应,并且都没有重复,故可以想到以下三种存储方式
 * 1> 用一维数组,以位置 + 1为数字,内容为字符串。例如String [] arr = {"yi"....}; 然后遍历输入字符串,可以匹配到yi,则为return index + 1;
 * 因为数组是从零开始的。
 * 2> 用list存储,可以用到list.indexof(object o) 方法,并且可以用contains(object o)进行判断是否存在。
 * 3> 用map存储,可以吧map定义为hashMap<String, integer> key为字符串,value为对应数字,但相对而言比前面两者消耗内存要多。
 * 
 * 第二、如何分割对于输入的字符串,获得出有数字对应的子字符串。
 *  经过观察输入字符串可以得出两个结论:
 *   1>、所有的子字符串的长度不是2就是3 
 *   2>、子字符串的每个首字符都不同(除了san和si)
 *  故可以有两种解决方案:
 *   1>、对于输入的字符串,以2或者3的长度进行切分总字符串。例如:string = "yier", subString = string.substring(0,2) = yi
 *   2>、利用正则表达式,让整个字符串用[y,e,s..]等进行切分,然后再判断。
 *  
 *  第三、如何对子字符串进行匹配,寻找下一个。
 *  对于上面两种切割方式,有以下两种匹配方式:
 *   1> 对于第一种方法,主要流程:
 *   首先要初始化一个int变量count,用来记录从总字符串上切下来所以字符串的长度(因为substring方法不会改变原来字符串的长度),以方便与总字符串相比较,终止循环条件。
 *   其次,用2个长度去切割字符串,如果不匹配,再用3个长度去切割。要用count记录所有切下来字符长度。
 *   最后,利用contains方法进行匹配和indexof方法返回对于数据
 *   2> 对于第二种方法: 
 *      首先把字符串根据正则表达式切割为字符串数组
 *      其次,在遍历数组的过程中,去匹配和原先已经存好的数据进行匹配。要注意以s的要进行判断是si还是san.
 *      这儿也可以用简单方法if else 来做。
 *      最后,用字符串把结果串联在一起。

四、核心算法

	public String trunNumber(String data) {
		String result = "";
		String str = "";
		int dataSize  = 0;
		while (data.length() > dataSize) {
			str = data.substring(dataSize, dataSize + 2);
			if (list.contains(str)) {
				result += String.valueOf(list.indexOf(str) + 1);
			} else {
				str = data.substring(dataSize, dataSize + 3);
				result += String.valueOf(list.indexOf(str) +1);
			}
			dataSize += str.length();
		}
		return result;
	}
五、测试类

package com.albertshao.csi.interview;

import java.util.ArrayList;
import java.util.List;

/**
 * @author albertshao
 * 
 */

public class Main12 {
	private static final List<String> list = new ArrayList<String>();
	static {
		list.add("yi");
		list.add("er");
		list.add("san");
		list.add("si");
		list.add("wu");
		list.add("liu");
		list.add("qi");
		list.add("jiu");
		list.add("ba");
	}

	public static void main(String[] args) {

		Main12 m = new Main12();
		String data = "yiersansan";
		System.out.println(m.trunNumber(data));
	}

	public String trunNumber(String data) {
		String result = "";
		String str = "";
		int dataSize  = 0;
		while (data.length() > dataSize) {
			str = data.substring(dataSize, dataSize + 2);
			if (list.contains(str)) {
				result += String.valueOf(list.indexOf(str) + 1);
			} else {
				str = data.substring(dataSize, dataSize + 3);
				result += String.valueOf(list.indexOf(str) +1);
			}
			dataSize += str.length();
		}
		return result;
	}
}

六、测试结果

1233




已知:yi er san si wu liu qi ba jiu 分别对应 123456789,对一段只含 有这几种字符的字符串进行转换,转换成相应的数字

#include #include using namespace std; char* ss[9] = {"yi", "er","san","si", "wu", "liu", "qi", "b...
  • xie294777315
  • xie294777315
  • 2014年04月12日 16:51
  • 886

关于计算机视觉的一些测试数据集和源码站点

以下是computer vision:algorithm and application计算机视觉算法与应用这本书中附录里的关于计算机视觉的一些测试数据集和源码站点,转自:http://blog.si...
  • a573233077
  • a573233077
  • 2018年01月08日 09:16
  • 87

[C#] 汉字转拼音,支持多音字

支持dotnet core的汉字转拼音,而且支持多音字。
  • wwwsq
  • wwwsq
  • 2015年06月04日 18:02
  • 21343

复杂网络笔记-R语言

最近学习了下复杂网络相关的东西,总结了部分基础的理论,与使用R语言igraph包,总结如下,还需要继续深入,目前只学了皮毛。...
  • fanfanrenrenmi
  • fanfanrenrenmi
  • 2016年08月25日 14:21
  • 5307

FAQ:BI与BA的区别及联系

【区别】     BA:“商业分析方法”,是指英文的Business Analytics。BI:“商业智能”,Business Intelligence。     简单的来说,我们...
  • juliefish
  • juliefish
  • 2013年05月20日 18:37
  • 4784

SI和DI寄存器的用途

SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。 但需要注意的是:在串处理指令中,SI用作隐含的源串地址,默认在DS中;DI用做隐含的目...
  • syflyhua
  • syflyhua
  • 2013年06月14日 16:35
  • 2690

汇编入门学习笔记 (六)—— si、di,双重循环

疯狂的暑假学习之  汇编入门学习笔记 (六)—— si、di,双重循环 参考: 《汇编语言》 王爽 第7章 1. and和or指令,与[bx+idata] ...
  • billvsme
  • billvsme
  • 2014年07月09日 01:24
  • 1622

【PSI/SI学习系列】2.PSI/SI深入学习2——PSI信息解析(PAT,PMT,CAT)

PSI 信息 INFORMATION OF PSI "PSI是对单一TS流的描述,是TS流中的引导信息"          PSI信息由节目关联表PAT、条件接收表CAT、节目映射表PMT和网络信息表...
  • u010090005
  • u010090005
  • 2013年10月24日 10:37
  • 5262

敏捷开发模式下的BA岗

敏捷开发模式下 的 需求分析岗——BA 传统的瀑布开发模式下需求分析岗是必不可少的。那么敏捷项目没有需求分析吗?在很多人的印象中,敏捷软件开发是种类似黑客行为的过程,是程序员最爱的勾当。不写文档,不...
  • langzai2012
  • langzai2012
  • 2016年07月08日 14:07
  • 1561

DAS、SAN、NAS三种存储方式的概念及应用

DAS(Direct-attached Storage) 直连存储 直连式存储与服务器主机之间的连接通常采用SCSI连接,SCSI通道是IO瓶颈;服务器主机SCSI ID资源有限,能够建立的SCSI...
  • qq_23348071
  • qq_23348071
  • 2017年06月30日 11:25
  • 408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:华为机试题---已知:yi er san si wu liu qi ba jiu 分别对应123456789
举报原因:
原因补充:

(最多只允许输入30个字)