首页 > 试题广场 >

构建短字符串

[编程题]构建短字符串
  • 热度指数:4381 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定任意一个较短的子串,和另一个较长的字符串,判断短的字符串是否能够由长字符串中的字符构建出来,且长串中的每个字符只能用一次。

输入描述:
一行数据包括一个较短的字符串S和一个较长的字符串T,用一个空格分隔。保证1<=|S|<=|T|<=100000。


输出描述:
如果短的字符串可以由长字符串中的字符构建出来,输出字符串 “true”,否则输出字符串 "false"。
示例1

输入

a b

输出

false
示例2

输入

fj jfiejfiejfie

输出

true
/*
我的想法是,每次把短字符串的字符拿出来在长字符串里找对应的字符,
如果找到结尾都成立则返回true,否则返回false
*/

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String shortstr = input.next();
        String longstr = input.next();
        StringBuffer sb = new StringBuffer();
        sb.append(longstr);//将长字符串放到sb中容易修改
        for(int i = 0;i<shortstr.length();i++){
            String s = String.valueOf(shortstr.charAt(i));//为了可以使用indexOf(String str)
            if(sb.indexOf(s)!=-1)
                sb.setCharAt(sb.indexOf(s),' ');//将已经使用的位置赋值为空格,防止二次使用
            else{
                System.out.println(false);
                return;
            }
        }
        
        System.out.println(true);
    }
}
比较笨拙的方法,不喜勿喷
发表于 2020-04-27 14:38:14 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        String t = scanner.next();
        int[] chs = new int[26];
        for (int i = 0; i < t.length(); i++) {
            chs[t.charAt(i) - 'a']++;
        }
        for (int i = 0; i < s.length(); i++) {
            chs[s.charAt(i) - 'a']--;
        }
        for (int i : chs) {
            if (i < 0) {
                System.out.println("false");
                return;
            }
        }
        System.out.println("true");
    }
}
编辑于 2019-07-08 17:01:30 回复(1)