• 2016校招真题之串的模式匹配


    1、题目描述

    对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。

    测试样例:
    "acbc",4,"bc",2
    返回:2
     

    2、代码实现

     1 package com.wcy.october;
     2 
     3 /**
     4  * 时间:2016年10月16日
     5  * 题目:串的模式匹配
     6  * 题目描述:对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。给定两个字符串A和B,
     7  * 及它们的长度lena和lenb,请返回题目所求的答案。
     8  * 测试样例:"acbc",4,"bc",2 返回:2
     9  */
    10 public class StringPattern {
    11 
    12     /**
    13      * // 方法一
    14      * 获取B在A中第一次出现的起始位置
    15      * @param A 输入A字符串
    16      * @param lena 输入A字符串长度
    17      * @param B 输入B字符串
    18      * @param lenb 输入B字符串长度
    19      * @return 第一次出现的起始位置
    20      */
    21     public int findAppearance(String A, int lena, String B, int lenb) {
    22         if(lena<lenb) return -1; // 如果A的长度小于B的长度,就直接返回-1
    23         if(lena==lenb){ // 如果A的长度等于B的长度,就直接比较它们是否相等
    24             if(A.equals(B))return 0;
    25             else return -1 ;          
    26         }
    27         for (int i = 0; i < A.length(); i++) {
    28             int temp = i; // 记录比较的位置
    29             for (int j = 0; j < B.length()&&i < A.length(); j++,i++) {
    30                 if (B.charAt(j)!=A.charAt(i)) {
    31                     break;
    32                 }
    33                 if (B.charAt(j)==A.charAt(i)&&j==B.length()-1) {
    34                     return i-B.length()+1;
    35                 }
    36             }
    37             i=temp;
    38         }
    39         return -1;
    40     }
    41     
    42     // 方法二
    43     public int findAppearance2(String A, int lena, String B, int lenb) {
    44         return A.indexOf(B);
    45     }
    46     
    47     /**
    48      * 用户页面测试
    49      * @param args
    50      */
    51     public static void main(String[] args) {
    52         String A = "acbc";
    53         int lena = 4;
    54         String B = "bc";
    55         int lenb = 2;
    56         StringPattern stringPattern = new StringPattern();
    57         int result = stringPattern.findAppearance(A, lena, B, lenb);
    58         System.out.println(result);
    59         
    60         System.out.println(stringPattern.findAppearance2(A, lena, B, lenb));
    61     }
    62     
    63 }
  • 相关阅读:
    python第三周练习
    python第一周作业
    SQLite3—数据库的学习—python
    python实现跳一跳辅助的实验报告
    Python——自己的第一个网页(文件的使用)
    第一次爬虫和测试
    numpy和matplotlib使用
    Python作业———预测球队比赛成绩
    PIL库的学习
    Pytho作业——Jieba库的使用和好玩的词云
  • 原文地址:https://www.cnblogs.com/wangchaoyuan/p/5966047.html
Copyright © 2020-2023  润新知