zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    while 循环 。。
    数据运算,运算符
    字符串常用操作
    列表常用操作
    三级菜单
    杂七杂八
    简单的登陆程序001
    猜年龄游戏
    实现密文输入密码
    使用urllib2打开网页的三种方法
  • 原文地址:https://www.cnblogs.com/wangchaoyuan/p/5966047.html
Copyright © 2011-2022 走看看