在字符串中找到子字符串第一次出现的位置---笔试面试题
2012-11-09 21:31
323 查看
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中出现的次数,很简单,将上面的程序稍加改造一下就可以。
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中出现的次数,很简单,将上面的程序稍加改造一下就可以。
相关文章推荐
- [C++]Implement strStr() 找到子字符串第一次出现的位置
- 百田游戏2014笔试题——找到有序序列中某个值第一次出现的位置,并打印
- 算法与数据结构面试题(21)-在一个字符串中找到第一个只出现一次的字符
- 剑指offer——面试题38:数字在排序数组中出现的次数(利用二分查找来找第一次和最后一次的位置)
- 【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回
- 字符串中第一次只出现一次的字符(×60内推笔试)
- java 求解字符串中第一次出现的字符的位置
- php计算最后一次,第一次字符串出现位置
- 查找指定字符串在字符串中第一次或最后一词出现的位置
- 练习2-5 编写函数any(s1,s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2的字符,则返回-1。
- 2016奇虎360研发工程师内推笔试编程题:找到字符串第一个只出现一次的字符
- 编写一个函数,实现从一个字符串中,查找另一个字符串的位置(笔试题) 例如int func("12345", "34")返回值为2,即在2号位置找到字符串“34”。
- 面试题41:从字符串中找到第一个只出现一次的字符
- [算法学习笔记]寻找子字符串第一次出现位置
- 找到不重复字母在一个字符串第一次出现的索引 三种方法
- 重复字符串出现的次数以及第一次数显的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 28. Implement strStr() (返回子串在字符串中第一次出现的位置)
- 面试题41:从字符串中找到第一个只出现一次的字符
- 【C语言【面试题】【笔试题】题目:在字符串中找出第一个只出现一次的字符。