在字符串中找到子字符串第一次出现的位置---笔试面试题

1、首先说明一下题目:给定两个字符串str1和str2,找到str2在str1第一次出现的位置。例如str1=“lizhongyi” str2=“zhong” str2在str1第一次出现的位置是2(从0开始)。

2、先抛开一切语言,单纯从算法的角度考虑,这道题该怎么做呢?(这种独立思考的过程很重要,要不断的训练自己

思路一:在str1中找str2中第一个字符出现的位置,然后再一个字符一个字符的比较str1和str2,如果到str2结束都相等,则找到str2在str1中第一次出现的位置。否则再在str1中找str2的第一字符出现的位置。。。。这种思路很好理解,也很好想到,可是如果用代码实现不太容易或者有些复杂。

思路二:从str1中截取和str2长度一样的字符串,和str2比较,相等即找到,不相等再截取一个新的字符串。直到找到或找不到。(这种思路很好,而且从计算机的角度考虑也很好实现)

3、Java实现代码:

package com.sailang.string;

public class StringTest
{
	public static void main(String[] args)
	{
		String str1 = "lizhongyizhongyi";
		String str2 = "zhong";
		
		System.out.println(findFirstPositionOfSubString(str1, str2));
	}
	/**
	 * 找到字符串str2在字符串str1中第一次出现的位置,找不到返回-1
	 * @param str1
	 * @param str2
	 * @return
	 */
	public static int findFirstPositionOfSubString(String str1, String str2)
	{
		int offset = 0;
		String substr = null;
		
		if((str1 == null) || (str2 == null) || (str1.length() < str2.length()))
		{
			return -1;
		}
		else
		{
			while(offset <= (str1.length() - str2.length()))
			{
				substr = String.copyValueOf(str1.toCharArray(), offset, str2.length());
				if(substr.equals(str2))
				{
					return offset;
				}
				offset ++;
			}
			return -1;
		}
	}
}
4、统计str2在str1中出现的次数,很简单,将上面的程序稍加改造一下就可以。



你可能感兴趣的:(在字符串中找到子字符串第一次出现的位置---笔试面试题)