一行数据包括一个较短的字符串S和一个较长的字符串T,用一个空格分隔。保证1<=|S|<=|T|<=100000。
如果短的字符串可以由长字符串中的字符构建出来,输出字符串 “true”,否则输出字符串 "false"。
a b
false
fj jfiejfiejfie
true
#include <bits/stdc++.h> using namespace std; int main() { string s,t; cin>>s>>t; map<char,int> m; bool flag = true; //用来判断能不能构建短字符串 for(auto it : t) m[it]++; for(auto it : s) { if(m[it]) m[it]--; else flag = false; } if(flag) cout<<"true"; else cout<<"false"; return 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"); } }
#include <bits/stdc++.h> using namespace std; int main(){ string str; bool flag=true; int vis[26]={0}; cin>>str; cin.ignore(); char c; while((c=cin.get())!='\n'){ vis[c-97]++; } for(int i=0;i<str.size();i++){ if(vis[str[i]-97]==0){ flag=false; break; } else vis[str[i]-97]--; } cout<<(flag ? "true":"false"); return 0; }
#include <stdio.h> #include <stdlib.h> int main(void) { char s[100000] = "", t[100000] = ""; scanf("%s %s", s, t); int counts[26] = { 0 }; const char* p = t; while (*p) ++counts[*p++ - 97]; p = s; while (*p) --counts[*p++ - 97]; int i; for (i = 0; i < 26; ++i) if (counts[i] < 0) return puts("false"), 0; return puts("true"), 0; }
/* 我的想法是,每次把短字符串的字符拿出来在长字符串里找对应的字符, 如果找到结尾都成立则返回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); } }比较笨拙的方法,不喜勿喷
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; public class Solution6_构建短字符串 { /** * 思路一: * 1.将长字符串的添加到HashMap中,字符和出现的次数 * 2.遍历较短的字符串,如果map中不包含该字符,则直接输出false,return; * 否通将map出现的字符的个数减一,知道遍历完较短的字符串 输出 true; */ public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String[] line1 = bf.readLine().split(" "); if (line1[0].length() > line1[1].length()) { System.out.println(false); return; } HashMap<Character, Integer> t_map = new HashMap<>();//较长字符串 for (Character c : line1[1].toCharArray()) { t_map.put(c, t_map.getOrDefault(c, 0) + 1); } for (Character c : line1[0].toCharArray()) { if (t_map.containsKey(c) && t_map.get(c) > 0) { t_map.put(c, t_map.getOrDefault(c, 0) - 1); } else { System.out.println(false); return; } } System.out.println(true); } } public class Main { /** * 思路二:借助数组实现hashmap */ public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String[] line1 = bf.readLine().split(" "); if (line1[0].length() > line1[1].length()) { System.out.println(false); return; } //直接将26个字符保存在数组中,nums[0] 表示 a,nums[1] 表示b int[] nums = new int[26]; for (int i = 0; i < line1[1].length(); i++) { nums[line1[1].charAt(i) - 'a']++; } //遍历较短字符串 for (int i = 0; i < line1[0].length(); i++) { int x = line1[0].charAt(i) - 'a'; if (nums[x] > 0) { nums[x]--; }else { System.out.println(false); return; } } System.out.println(true); } }
#include <bits/stdc++.h> using namespace std; int main(){ string s, t; cin>>s>>t; int a[26] = {0}, b[26] = {0}; for(int i=0;i<s.length();i++) a[s[i]-'a']++; for(int i=0;i<t.length();i++) b[t[i]-'a']++; bool flag = true; for(int i=0;i<26;i++){ if(a[i]>b[i]){ flag = false; break; } } cout<<(flag?"true":"false")<<endl; return 0; }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.HashMap; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] strs = br.readLine().trim().split(" "); System.out.println(solve(strs[0].toCharArray(), strs[1].toCharArray())); } private static boolean solve(char[] S, char[] T) { HashMap<Character, Integer> counter1 = new HashMap<>(); HashMap<Character, Integer> counter2 = new HashMap<>(); for(int i = 0; i < T.length; i++){ if(i < S.length){ if(counter1.containsKey(S[i])) counter1.put(S[i], counter1.get(S[i]) + 1); else counter1.put(S[i], 1); } if(counter2.containsKey(T[i])) counter2.put(T[i], counter2.get(T[i]) + 1); else counter2.put(T[i], 1); } for(Character key: counter1.keySet()) if(!counter2.containsKey(key) || counter1.get(key) > counter2.get(key)) return false; return true; } }
package main import ( "fmt" "os" "bufio" ) var in=bufio.NewReader(os.Stdin) func main() { var s1,s2 string fmt.Fscan(in,&s1,&s2) cnt:=map[byte]int{} for _,ch:=range []byte(s2){ cnt[ch]++ } for _,ch:=range []byte(s1){ if _,ok:=cnt[ch];!ok{ fmt.Print(false) return }else{ cnt[ch]-- if cnt[ch]==0{ delete(cnt,ch) } } } fmt.Print(true) }
#include <bits/stdc++.h> using namespace std; int main() { string a,b; cin >> a >> b; unordered_map<char, int> myMap; for (const auto& ch : b) { myMap[ch]++; } for (const auto& ch : a) { if (myMap.count(ch)) { myMap[ch]--; if (myMap[ch] == 0) { myMap.erase(ch); } } else { cout << "false" << endl; return 0; } } cout << "true" << endl; return 0; }
import java.util.Scanner; /** * @Date: 2020-05-04 18:23 * @version: 1.0 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); StringBuilder t = new StringBuilder().append(sc.next()); int index; for (int i = 0; i < s.length(); i++){ index = t.indexOf(Character.toString(s.charAt(i))); if (index == -1){ System.out.println(false); return; } t.deleteCharAt(index); } System.out.println(true); } }2:
import java.util.HashMap; import java.util.Scanner; /** * @Date: 2020-05-04 18:48 * @version: 1.0 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); String t = sc.next(); HashMap<Character,Integer> map = new HashMap<>(); for (int i = 0; i < t.length(); i++){ if (map.get(t.charAt(i)) != null) map.put(t.charAt(i), map.get(t.charAt(i))+1); else map.put(t.charAt(i), 1); } for (int i = 0; i < s.length(); i++){ Integer num = map.get(s.charAt(i)); if (num ==null || num == 0){ System.out.println(false); return; } map.put(s.charAt(i), num-1); } System.out.println(true); } }
// 思路很简单,关键在于,不要多次使用indexOf,那么每次都是n的时间复杂度 // 所以会通过率很低,解决办法就是使用字典存储来代替长长的字符串,这样就可以不去使用indexOf var line=readline().split(' ') var small=line[0]; var big=line[1]; // 判断长度 if(small.length>big.length){ var tem=small; small=big; big=tem; } big=big.split('') var flag=true; // 如果每次都使用indexOf,那么会搜索多次big数组,时间复杂度就很大 // 所以最好把big设置为字典 var mymap={} for(var j=0;j<big.length;j++){ if(mymap[big[j]]){ mymap[big[j]]++ }else{ mymap[big[j]]=1; } } for(var i=0;i<small.length;i++){ if(mymap[small[i]]>0){ mymap[small[i]]--; }else{ console.log("false") flag=false break; } } if(flag){ console.log("true") }
import java.util.*; public class Main{ public static void main(String args[]){ Scanner sc = new Scanner(System.in); String str1 = sc.next(); String str2 = sc.next(); sc.close(); System.out.println(canconstruct(str1,str2)); } public static boolean canconstruct(String str1, String str2){ for(int i=0;i<str1.length();i++){ char c = str1.charAt(i); if( str2.indexOf(c) == -1){ return false; }else{ } } return true; } }
#include <iostream> #include <string> using namespace std; int main() { const int SIZE = 26; //空间换时间,算法复杂度O(m+n+k),空间复杂度O(2*K) int arr1[SIZE] = {0}; int arr2[SIZE] = {0}; string s1; string s2; cin >> s1; cin >> s2; for(char c:s1) arr1[c-'a'] += 1; for(char c:s2) arr2[c-'a'] += 1; for(int i = 0; i < SIZE; ++i) { if(arr1[i] > arr2[i]) { cout << "false" << endl; return 0; } } cout << "true" << endl; return 0; }
import java.util.Scanner; public class Main { public static void main(String[] args) { String a, b; int arr[] = new int[128]; Scanner cin = new Scanner(System.in); a = cin.next(); b = cin.next(); for (int i = 0; i < a.length(); i++) { arr[a.charAt(i)]++; } for (int i = 0; i < b.length(); i++) { arr[b.charAt(i)]--; } boolean flag = true; for (int i = 0; i < arr.length; i++) { if (arr[i] > 0) { flag = false; break; } } System.out.println(flag); } }