`

初识有穷状态机

 
阅读更多

   由于项目提交测试,上班时间比较无聊,于是乎瞎逛论坛回答问题赚积分。无意间看到开源中国老大红薯发的贴,是关于

 

一道笔试题的。解题的思路是通过有穷状态机来解决,看了一下思路,自己也写了写java版本的。(原文是C++版本的)

 

题目的要求是:一个字符串由多个单词组成,这些单词由一个或者连连续多个空格分隔开,请写一个程序统计输入的字符串

 

有多少个单词。

 

    说明一下,此题解决方法不唯一,也有比我用的方法更简单。在这里,只是想针对有穷状态机算法来解决,顺便了解一

 

下该算法。

 

    实现原理:

   

    字母表:英文字母和空格。

    状态:起始状态、单词状态、空格状态和接受状态。

    转换规则:

    起始状态下读到非空格,进入单词状态。

    单词状态下读到空格,进入空格状态。

    空格状态下读到非空格,进入单词状态。

    在起始状态、单词状态和空格状态下读到’/0’,进入结束状态。

    每次进入单词状态,单词数计数加1。

 

package com.cetus.test;

public class DFA {

	public enum State {
		STAT_START, STAT_IN_WORD, STAT_IN_SPACE
	};

	public static int DFATest(String str) {
		State state = State.STAT_START;
		int numOfWords = 0;
		for (int i = 0; i < str.length(); i++) {
			char aChar = str.charAt(i);
			if (aChar != '\0') {
				switch (state) {
					case STAT_START: {
	                    if(aChar ==' '){
	                    	state=State.STAT_IN_SPACE;
	                    }else{
	                    	numOfWords++;
	                    	state=State.STAT_IN_WORD;
	                    }
	                    break;
					}
					case STAT_IN_WORD: {
						if(aChar ==' '){
							state=State.STAT_IN_SPACE;
						}
						break;
					}
					case STAT_IN_SPACE: {
						if(aChar !=' '){
							state=State.STAT_IN_WORD;
							numOfWords++;
						}
						break;
					}
					default:break;
				}
			}
		}
		return numOfWords;
	}

	public static void main(String[] args) {
             String strWords="i am cetus, how are you?";
             System.out.println(DFATest(strWords));
	}

}

 

分享到:
评论

相关推荐

    初识C++ 初识C++

    初识C++ 初识C++ 初识C++初识C++初识C++初识C++初识C++

    初识云计算.ppt

    初识云计算初识云计算初识云计算初识云计算初识云计算初识云计算初识云计算初识云计算

    python初识

    python 列表初识,通过此代码,你能够了解到python的列表操作

    初识计算机PPT课件.pptx

    "初识计算机PPT课件" 计算机的基本概念: 计算机是一种电子设备,能够执行用户的指令,进行数据处理和存储。计算机的种类很多,可以分为台式计算机、便携式计算机、掌上计算机等。 台式计算机: 台式计算机是一...

    jvm初识及JIT优化

    jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...

    跟我学JTAG协议破解——第一弹 初识J跟我学JTAG协议破解

    TAP状态机的每一个状态都有两个状态触发——在TCK的上升沿,TMS的电平决定了跳转的分支。 JTAG协议是一种功能强大且广泛应用的下载和仿真协议。了解JTAG协议的原理和实现细节,对于电子设计和嵌入式系统开发具有...

    初识C语言.pdf

    初识C语言.pdf

    三年级信息技术课程初识画图

    三年级信息技术课程《初识画图》课件内容 因为要参加比赛,所属机房 装不上

    初识ERP初识ERP.ppt

    初识ERP初识ERP

    初识JavaScript(源代码)

    初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识...

    初识A寻路算法

    标题中的“初识A*寻路算法”表明我们要探讨的是计算机科学中的一种路径搜索算法——A*(A-star)算法。A*算法是Dijkstra算法的优化版本,广泛应用于游戏开发、地图导航、网络路由等领域,它通过引入启发式信息来实现...

    MATLAB初识神经网络

    你还将学习如何使用MATLAB可视化工具来观察网络的训练过程和结果,这有助于理解模型的行为和性能。 最后,PDF版本的讲义将作为补充资料,提供详细的理论解释和实例分析,帮助巩固你在视频中学到的知识。讲义可能...

    初识EXCEL教案

    初识EXCEL 教案 多媒体课件教师上课专用

    初识数据安全系列语音教程

    初识数据安全系列语音教程

    初识excel教学设计

    【初识Excel教学设计】 Excel是一款广泛应用于数据管理和分析的电子表格软件,对于初学者来说,理解其基本功能和操作是至关重要的。本教学设计针对初中信息技术课程,旨在引导初一学生逐步熟悉Excel,帮助他们建立...

    初识电脑朋友课件

    【初识电脑朋友课件】是一份专为初学者设计的信息技术入门教程,旨在帮助初次接触电脑的朋友快速理解和掌握基本的计算机操作技能。这个课件可能涵盖了从打开电脑到使用各种常见软件的全面内容,是学习电脑基础知识的...

    操作系统实验报告实验一 WINDOWS进程初识

    #### 实验一:Windows 进程初识 ##### 实验目的 1. **学会使用VC编写基本的Win32 Console Application(控制台应用程序)**: - 通过本实验,学生将了解如何在Visual C++ 6.0环境中创建控制台应用程序。 - 掌握...

    《初识Excel》

    本课是中学信息技术-_《初识Excel》PPT课件.ppt 的课件

Global site tag (gtag.js) - Google Analytics