【华为机试题】字符串查找
来源:互联网 发布:python核心编程第二版 编辑:程序博客网 时间:2024/05/16 11:50
输入两个字符串,查找字符串1中与字符串2最先匹配的内容,将匹配的字符串输出。字符串2支持?通配符,?代表任意一个字符,已知字符串2不可能出现只有?的情况。字符串1和字符串2的最大长度位128.
例如:
输入:abcdefabcdeg,a?c??f
样例输出:abcdef
解决该问题使用到String类中的多个函数:substring(), toCharArray(), charAt(), indexOf(). 我解决这一问题的思路是,将字符串2作为校验单元,与字符串1从头开始对比,如果发现字符串1的子串与字符串2相同,则寻找结束,如果没有,则向后推移,从第1个元素开始对比,重复上述步骤,直至校验单元移至字符串1的结尾。具体实现代码如下:
import java.util.Arrays;import java.util.Scanner;abstract class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); String str = in.nextLine(); in.close(); String str1 = str.substring(0, str.indexOf(",")); char[] astr1 = str1.toCharArray(); String str2 = str.substring(str.indexOf(",")+1,str.length()); int count = 0; int[] index = new int[str2.length()]; for(int i=0; i<str2.length(); i++){//找出通配符?在字符串2中出现的位置 if(str2.charAt(i)=='?'){ index[count] = i; count++; } } index = Arrays.copyOf(index, count); for(int i=0; i<astr1.length-str2.length()+1; i++){ char[] charTemp = Arrays.copyOf(astr1, astr1.length); for(int j=0; j<index.length; j++){ charTemp[i+index[j]] = '?'; } String strTemp = new String(charTemp); int k = strTemp.indexOf(str2); if(k!=-1){//对比查找符合要求的子串 String outStr = str1.substring(k,k+str2.length()); System.out.println(outStr); break; } } }}
输入:abcdefghijkabcdflk,f?h?j
输出:fghij
1 0
- 【华为机试题】字符串查找
- 华为机试题-----查找一个字符串的子字符串集
- 华为机试:查找字符串
- 华为机试题---字符串压缩
- 华为机试题: 字符串逆序
- 华为机试题:修改字符串
- 华为机试题:字符串替换
- 华为机试题: 字符串分割
- 华为机试题--字符串分隔
- 华为机试题——字符串操作
- 华为机试题:将字符串间隔输出
- 【2014华为机试题】01.字符串右补齐
- 2014华为机试题-字符串压缩
- 指针遍历字符串—华为机试题
- 华为机试题——字符串处理
- 2014华为机试题7:过滤字符串
- 2014华为机试题8:压缩字符串
- 华为机试题(字符串处理集锦)
- 发送邮件的plsql代码(续)
- applet中archive?
- 微信支付
- UVa12169 - Disgruntled Judge(模运算、拓展欧几里得)
- C/C++中static关键字详解
- 【华为机试题】字符串查找
- inodes占用100%的问题
- poj 3061
- LeetCode 最长递增子序列的O(nlogn)详解
- OpenCV中简单矩阵运算
- 成长,一瞬间?
-  和 的区别
- vim小部分转格式
- java工厂模式