首页 > 试题广场 >

关键字过滤:输入字符串s1和s2,判断s1中是否顺序包含s2

[问答题]

关键字过滤:输入字符串s1和s2,判断s1中是否顺序包含s2中所有字符(大小写敏感),如果否,输出s1,如果是,输出“不可描述”

例:输入ABCde,Ad,输出:不可描述

输入ABCde,AA输出:ABCde

要求:不能使用字符相关的库函数

 

import java.util.Scanner;
 
public class a4399 {
 
        public static void main(String args[]){
            Scanner sc = new Scanner(System.in);
            String str = sc.nextLine();
            String str1 = sc.nextLine();
            String arr[] = new String[str.length()];  //第一次输入的数
            String arr1[] = new String[str1.length()];//第二次输入得数
            int count=0;
            for(int i=0;i<str.length();i++){
                arr[i]= str.substring(i,i+1);
            }
            for(int j=0;j<str1.length();j++){
                arr1[j]= str1.substring(j,j+1);
            }
            for(int k =0;k<str1.length();k++){
                for(int n =0;n<str.length();n++){
                    if(arr1[k].equals(arr[n])){
                        arr[n]="*";
                        count++;
                        break;
                    }
                }
            }
            if(str1.length()==count){
                System.out.println("不可描述");
            }else{
                System.out.println(str);
            }
        }
 
}

发表于 2019-08-21 20:40:18 回复(0)
import java.util.Scanner;
 
public class solution {
 
        public String findit(String str){
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.next();
        String str2 = scanner.next();
        char[] char1 = str1.toCharArray();
        char[] char2 = str2.toCharArray();
        int p1 = 0;
        int p2 = 0;
        while(p1<str1.length() && p2<str2.length()){
            while(p1<str1.length() && p2<str2.length() && char1[p1]!=char2[p2]){
                p1++;
            }
            p1++;
            p2++;
        }
        if(p2 >= char2.length){
            return new String("不可描述");
        }else{
            return str1;
        }        
    }
}

发表于 2019-09-12 16:56:57 回复(0)
bool isMatch(string& s1string& s2)
{
    int index(0);
    for (int i = 0i < s1.size(); i++)
    {
        if (s1[i] == s2[index])
            ++index;
        if (index == s2.size())
            return true;
    }
    return false;
}
发表于 2020-08-20 11:19:23 回复(0)
public String includeStr(String s1, String s2){
        if(s1.length() < s2.length()) return s2;
        String s = "";
        int index = 0;
        for(int i = 0; i < s2.length(); i++){
            int j = index;
            for(; j < s1.length();){
                if(s2.charAt(i) == s1.charAt(j)){
                    s += s2.charAt(i);
                    index = j;
                    break;
                }else{
                    j++;
                }
            }
        }
        if(s.equals(s2)) return "不可描述";
        else return s2;
    }

发表于 2020-03-11 21:34:58 回复(0)
字符串处理?

首先想到的就是指针进行移动,根据s2的字符,寻找s1中符合的下标,设为i,进行移动,这就是暴力破解法。
function compare(s1,s2){
    let start = 0;
    let judge,i;
    for(let p = 0; p < s2.length; p++){
        
        //解决了头个字符的查找问题,现在进行下一个字符的查找。 这个可以用一个循环 而且要注意的是,要从下一个位置开始
        judge = s2[p];
        i = find(judge,s1,start);
        if(i === -1){
            return s1;
        }
        start = i+1;
    }
    return "不可描述";


function find(j,s,st){
    let key = -1;
    for(let i = st; i < s.length; i++){
        if(s[i] === j){
            return i;
        }
    }
    return key;
}

  
发表于 2019-12-09 21:41:41 回复(0)
定义一个Index,指向匹配串的位置,初始时index=0,说明此时是看匹配串第一个字符,每次匹配上,index++,当index==匹配串字符数组.length,就返回不可描述,否则返回源字符串。
发表于 2019-09-22 21:43:03 回复(0)
str1=input()#第一次输入 str2=input()#第二次输入 list_str=[] for i in range(len(str1)):  for j in range(len(str2)):  if str1[i]==str2[j]:
            list_str.append(j)
new_list=[] print(list_str) for item in list_str:  if not item in new_list:
        new_list.append(item)
new_list.sort() print(new_list)
new_str="" for i in range(len(new_list)):
    new_str=new_str+str2[new_list[i]] if(new_str==str1): print("不可描述") else: print(str1)

发表于 2019-09-01 12:52:24 回复(0)