列表

详情


GP29. 字符串构成

描述

给定两个字符串des 和src  ,判断 des能不能由 src 里面的字符构成,//如果可以,返回 true ;否则返回 false,src中的每个字符只能在 des 中使用一次。

知识点:
for range遍历字符串
cnt[ch-'a']隐士转换byte转为int类型
数组的索引可以充当一个map的key,来表示唯一

示例1

输入:

"ab","aab"

输出:

true

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Go 解法, 执行用时: 2ms, 内存消耗: 844KB, 提交时间: 2022-07-24

package main
//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param des string字符串 
 * @param src string字符串 
 * @return bool布尔型
*/
func canConstruct( des string ,  src string ) bool {
    // write code here
    des_li := []byte(des)
	src_li := []byte(src)
	//	1、src 做成一个字典,并把个数都统计进去;2、再循环des,循环到了,就减一
	new_map := make(map[byte]int)

	for _, i := range src_li {
		new_map[i]++
	}

	for _, i := range des_li {
		if new_map[i] == 0 {
// 			fmt.Println(false)
			return false
		}
		new_map[i]--
	}

// 	fmt.Println(true)
	return true
    
}

C++ 解法, 执行用时: 3ms, 内存消耗: 316KB, 提交时间: 2022-07-03

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param des string字符串 
     * @param src string字符串 
     * @return bool布尔型
     */
    bool canConstruct(string des, string src) {
        // write code here
        vector<int> count(26,0);
        for(auto c:src){
            count[c-'a']++;
        }
         for(auto s:des){
            count[s-'a']--;
            if(count[s-'a']<0)return false;
        }
        return true;
    }
};

Go 解法, 执行用时: 3ms, 内存消耗: 828KB, 提交时间: 2022-06-08

package main;

func canConstruct( des string ,  src string ) bool {
    a := make(map[rune]int) 
    for _, b := range src {
        a[b]++
    }
    for _, c := range des {
        if a[c] != 0 {
            a[c]--
        } else {
            return false
        }
    }
    return true
}

Go 解法, 执行用时: 3ms, 内存消耗: 828KB, 提交时间: 2022-06-04

package main
//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param des string字符串 
 * @param src string字符串 
 * @return bool布尔型
*/
func canConstruct( des string ,  src string ) bool {
    // write code here
    var srcMap map[byte]int 
    srcMap = make(map[byte]int, len(src))
    for val := 0; val < len(src); val++{
        if _, ok := srcMap[src[val]]; ok{
            srcMap[src[val]]++
        }else{
            srcMap[src[val]] = 1
        }
    }
    for val := 0; val < len(src); val++{
        if _, ok := srcMap[des[val]]; !ok{
            return false
        }else{
            if srcMap[des[val]] <= 0{
                return false
            }
            srcMap[des[val]]--
        }
    }
    return true
}

Go 解法, 执行用时: 3ms, 内存消耗: 844KB, 提交时间: 2022-07-13

package main
//import "fmt"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param des string字符串 
 * @param src string字符串 
 * @return bool布尔型
*/
func canConstruct( des string ,  src string ) bool {
    // write code here
    m := make(map[int]int)
    outer:
    for _, c := range des {
        for index, c2 := range src {
            if c == c2 && m[index] == 0 {
                //找到这个字符,并且没有使用
                m[index]++
                continue outer;
            }
        }
        //走到这里说明当前字符找不到
        return false
    }
    //没有发生异常退出表示所有字符都找到了
    return true
}

上一题