【华为机试题】字符串查找

来源:互联网 发布: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