zoukankan      html  css  js  c++  java
  • 字符串查找---查找子字符串在原字符串第一次出现时的起始索引

    一,问题描述:

    给定两个不同长度的字符串,查找短字符串在长字符串中第一次出现时的索引。

    比如:s = "I come from china, You come from India" ,  t = "from"

    此时"from"在 s 中第一次出现的索引为 7

    二,算法分析:

    依次扫描字符串 s 中的每个字符,开始一轮判断:若 s 中字符和 t 中字符相同,则获取 s 的下一个字符和 t 的下一个字符...

    直至到t的末尾或者在某个点处 s 中字符与 t 中字符不相等了。

    前者表明 t 字符串在 s 字符串中;后者表明,从s的当前字符开始,t 不在 s 中,

    那么此时 s 就扫描下一个字符,再开始下一轮判断

    三,代码如下:

     1 public class StringIndex {
     2     
     3     public static void main(String[] args) {
     4         String s = "I come from china, You come from India";
     5         String t = "from";
     6         int r_begin = strIndex(s.toCharArray(), t.toCharArray());
     7         System.out.println(r_begin);
     8  9 
    10     //查找t 在 s中第一次出现时,t在 s中的起始索引
    11     public static int strIndex(char[] s, char[] t){
    12         int k_begin = -1;//标记 t 在 s中的起始位置
    13         for(int index = 0; index < s.length; index++)// 对 s 中的每个字符由 while开启一轮比较
    14         {
    15             int i = index;//字符串s 从 index 处开始和 字符串 t 比较
    16             int j = 0;
    17             while((i < s.length && j < t.length) && (s[i++] == t[j++]))
    18                 ;
    19             if(j == t.length)//字符串 t 出现在了 字符串 s 中
    20             {
    21                 k_begin = index;//记录下字符串 t 出现在 s中的起始位置,程序返回该位置
    22                 break;
    23             }
    24         }
    25         return k_begin;
    26     }
    27

    另外可参考JDK类库:String类的indexOf(String )方法

  • 相关阅读:
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    125. Valid Palindrome
    124. Binary Tree Maximum Path Sum
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    120. Triangle
    119. Pascal's Triangle II
  • 原文地址:https://www.cnblogs.com/hapjin/p/5382961.html
Copyright © 2011-2022 走看看