字符串匹配

通过字符数组模拟了字符串基础操作,字符串匹配用的是暴力匹配,当模式串和主串不匹配时,i++,再重新开始匹配,比较简单。相对老师的代码,我在MyString的第二个构造函数多加了一个判断(因为在测试的时候,我多输入了一个字符,导致字符串的长度大于了预设的最大长度,报错了),程序健壮性好了些。

package day08;public class MyString {/*** The maximal length.*/public static final int MAX_LENGTH = 10;/*** The actual length.*/int length;/*** The data.*/char[] data;/*** Construct an empty char array.*/public MyString() {length = 0;data = new char[MAX_LENGTH];}// Of the first constructor.public MyString(String paraString) {data = new char[MAX_LENGTH];length = paraString.length();length = length > MAX_LENGTH ? MAX_LENGTH : length;// Copy data.for (int i = 0; i < length && i < MAX_LENGTH; i++) {data[i] = paraString.charAt(i);} // Of for i}// Of the second constructor/*** Overrides the method claimed in Object, the superclass of any class.*/public String toString() {String resultString = "";for (int i = 0; i < length; i++) {resultString += data[i];} // Of for ireturn resultString;}// Of toString/*** Locate the position of substring.* * @param paraMyString The given substring.* @return The first position. -1 for no matching.*/public int locate(MyString paraMyString) {boolean tempMatch = false;for (int i = 0; i < length - paraMyString.length; i++) {// Initialize.tempMatch = true;for (int j = 0; j < paraMyString.length; j++) {if (data[i + j] != paraMyString.data[j]) {tempMatch = false;break;} // Of if} // Of for jif (tempMatch) {return i;} // Of if} // Of for ireturn -1;}// Of locate/*** Get a substring.* * @param paraStartPosition The start position in the original string.* @param paraLength        The length of the new string.* @return The first position. -1 for no matching.*/public MyString subString(int paraStartPosition, int paraLength) {if (paraStartPosition + paraLength > length || paraStartPosition < 0) {System.out.println("The bound is exceeded.");return null;}MyString resultMyString = new MyString();resultMyString.length = paraLength;for (int i = 0; i < paraLength; i++) {resultMyString.data[i] = data[paraStartPosition + i];} // Of for ireturn resultMyString;}// Of substring/*** The entrance of the program.* * @param args Not used now.*/public static void main(String args[]) {MyString tempFirstString = new MyString("I like ik.");MyString tempSecondString = new MyString("ik");int tempPosition = tempFirstString.locate(tempSecondString);System.out.println("The position of \"" + tempSecondString + "\" in \"" + tempFirstString + "\" is: " + tempPosition);MyString tempThirdString = new MyString("ki");tempPosition = tempFirstString.locate(tempThirdString);System.out.println("The position of \"" + tempThirdString + "\" in \"" + tempFirstString + "\" is: " + tempPosition);tempThirdString = tempFirstString.subString(1, 2);System.out.println("The substring is: \"" + tempThirdString + "\"");tempThirdString = tempFirstString.subString(5, 5);System.out.println("The substring is: \"" + tempThirdString + "\"");tempThirdString = tempFirstString.subString(5, 6);System.out.println("The substring is: \"" + tempThirdString + "\"");}// Of main
}// Of class MyString

运行结果:

小结

  1. 面向对象与面向过程相比, 有哪些优势?
    答:面向对象比面向过程的代码复用性更高,面向对象有清晰的代码结构,易维护和拓展。
  2. 比较顺序表和链表的异同.
    答:同:逻辑上都是顺序结构;异:顺序表在内存中是必须连续存储的,且长度在声明时就确定了,支持随机访问,但不宜元素的随机插入和删除;链表在内存中可以离散存储,长度不固定,每个元素要记录下一个元素在内存中的地址,只能顺序访问,能动态增加或减少元素。
  3. 分析顺序表和链表的优缺点.
    答:顺序表:优点:能随机访问元素;缺点:表长固定,不能修改表长,不适合在表中间添加和删除元素(需要移动其它元素)。链表:优点:可以改变表长,添加和删除都不需要移动其他元素;缺点:只能顺序访问元素,每个元素都要保存下一个元素的地址,浪费了一定的存储空间。
  4. 分析调拭程序常见的问题及解决方案.
    答:如果有报错,就直接定位到报错的代码;如果看运行结果与预期结果不符,就打印可能出错的中间结果,由下到上,逐步定位到出错代码。
  5. 分析链队列与循环队列的优缺点.
    答:链队列优点:不需要考虑队列最大长度(只要内存满足);缺点:每个元素要保存下一个元素的地址,浪费内存。循环队列优点:不用保存下一个元素的地址;缺点:有长度限制,为了区分队空和队满要浪费一个元素空间。
  6. 第 18 天建立的两个队列, 其区别仅在于基础数据不同, 一个是 int, 一个是 char. 按这种思路, 对于不同的基础数据类型, 都需要重写一个类, 这样合理吗? 你想怎么样?
    答:不合理。在CircleIntQueue的构造函数中设置参数,根据调用者new 一个CircleIntQueue对象时传递的参数来初始化data数据,并把类型保存为实例属性,至于有关类型的方法调用,则通过方法重载实现。

Day08——字符串匹配、小结相关推荐

  1. 字符串匹配之KMP算法详解

    kmp算法又称"看毛片"算法,是一个效率非常高的字符串匹配算法.不过由于其难以理解,所以在很长的一段时间内一直没有搞懂.虽然网上有很多资料,但是鲜见好的博客能简单明了地将其讲清楚. ...

  2. 算法之路,带你轻松学废算法系列之字符串匹配(中)

    文章目录 字符串匹配中 前言 KMP算法 KMP算法的基本原理 失效函数计算方法 问题解答 KMP 算法复杂度分析 小结 Trie树 什么是Trie树 如何实现一棵 Trie 树? Trie树的构造 ...

  3. 算法之路,带你轻松学废算法系列之字符串匹配(下)

    文章目录 字符串匹配下 前言 引入 多模式串匹配算法:AC 自动机 AC自动机过滤敏感词 时间复杂度分析 小结 结尾 字符串匹配下 前言 大家好,我是魏果果哦,算法呢,是我们程序员一生无法避免的垫脚石 ...

  4. JavaScript正则——字符串匹配正则的方法

    一.字符串匹配正则方法 语法:字符串.方法名称 1>search (类似于indexOf) 如果匹配,返回下标位置 如果不匹配,返回-1 查找a的下标位置 注: ①下标从0开始数: ②空格也需要 ...

  5. CCF - 201409-3 - 字符串匹配

    问题描述 试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你 ...

  6. 字符串匹配shiftand算法

    令人惊叹的Shift-And/Shift-Or 写在前面:Shift-And/Shift-Or是如此令人惊叹的算法,在KMP基础上开始一段神奇之旅. 目的:以Shift-And算法为载体,试图在减少思 ...

  7. 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全

    文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...

  8. 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...

  9. Rabin-Karp ( 字符串匹配 )详解

    字符串匹配,例从 字符串S 中( 长度为 n ),找到 字符串T ( 长度为 m ) 经典思路:遍历 字符串 S,对于每个都为起点,匹配一次,则 O( n m )的复杂度 但是这样我们就对 字符 重复 ...

  10. 字符串匹配KMP算法

    字符串匹配KMP KMP过程其实就是去找下一个更好的状态的过程,省略去了中间穷举的无用过程,直接跳到下一个更好的状态,通过模式串本身的信息,站在模式串的角度来考虑问题 取长的一对 若想让模式串直接从S ...

最新文章

  1. 物体的三维识别与6D位姿估计:PPF系列论文介绍(四)
  2. 【Java 网络编程】UDP 服务器 客户端 通信 ( DatagramSocket | DatagramPacket | UDP 发送数据包 | UDP 接收数据包 | 端口号分配使用机制 )
  3. 机器视觉行业市场现状及发展前景分析
  4. C++中派生类的构造函数
  5. Audacity Mac版(音频录制编辑合成工具)中文版
  6. GitHub桌面版 Github Desktop 下载
  7. mysql创建聚集索引sql_SQL:聚集索引和非聚集索引
  8. Unity3d 人物跳跃后落地悬空问题
  9. adb 隐藏/删除 app
  10. ASP.net 简单注册界面
  11. 谢孟媛初级文法28 课地方副词时间副词和程度副词
  12. 实现android wifi语音通话功能吗,Android下自写类似系统wifi管理功能的实现
  13. DOSBox使用总结——调整DOSBox窗口并自动挂载指定目录
  14. 教你十分钟在Linux系统上快速装机并安装Ansible
  15. 思维导图 XMind 闯关之路(第01关)新建文件 建立分支
  16. [嵌入式]嵌入式系统概述
  17. POI:java导出excel,java设置单元格公式,求和
  18. 20155214曾士轩 2016-2017-2 《Java程序设计》第1周学习总结
  19. 计算机英语的文章,计算机英语 文章
  20. Pedometer_forAndroid

热门文章

  1. 服务器dns被劫持如何修复,dns劫持,教您DNS被劫持如何修复
  2. C# 中的委托和事件(详解)
  3. Unity2019最新ECS架构开发MMO游戏笔记更新计划
  4. 数据接口-免费版(股票数据API)
  5. 【Prometheus】prometheus告警配置
  6. ios系统铃声调用方法
  7. 菜鸟的Springboot学习日历(一)
  8. Docker Nginx配置(docker.io/nginx)
  9. 中国科学技术大学计算机考研好考吗,中国科学技术大学计算机考研复习方法谈(2)...
  10. 前端如何在本地启动一个服务,跑打包后的项目