今天的三个简单算法

今天开始刷leecode,写了三个简单的算法,但是却给我带来了巨大的困难。例题如下,

  1. 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
    J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
    我给出的答案:
class Solution {
public:
	int numJewelsInStones(string J, string S) {
		int n = S.length() - 1;//每一位判断一次
		int count = 0;// 宝石数
		int j = J.length()-1; //定义字符串J内位置
		while (j >= 0)
		{
			while (n >= 0)
			{
				if (S[n] == J[j])
				{
					count++;
					n--;
					//	S = S.replace();
				}
				else
				{
					n--;
				}
			}
			j--;
			n = S.length() - 1;
		};
		return count;
	}
};

但回想一下,可能用for比较好。
2.题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
我的回答:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int i = nums.size();// 数组元素数量
        for(int j=0;j<i;j++)
        {
            int Num = target - nums[j];
            for(int jj=j+1;jj<i;jj++)
            {
                if (Num == nums[jj])
                    return {j,jj};
            }
        }
        return {0};
    }
};

暴力方法,解题处给了提示用哈希的方法。回头研究研究。
3.实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。

示例 1:

输入: “Hello”
输出: “hello”
我的回答:

class Solution {
public:
    string toLowerCase(string str) {
        string strNum = "abcdefghijklmnopqrstuvwxyz";
        int w = str.length();
        for(int i=0;i<w;i++)
        {
            if((int)str[i]<91&&(int)str[i]>64)
            {
                int n = (int)str[i]-65;
                str.replace(i,1,strNum.substr(n,1));
            }
        }
        return str;
    }
};

我承认我想多了。。 附上正常解法

class Solution {
public:
    string toLowerCase(string str) {
        for(int i=0;i<str.size();i++)
        {
            if(str[i]>='A' && str[i]<='Z')
            {
                str[i]=str[i]+32;
            }
        }
        return str;
    }
};

但是进一步让我对string 里面的 replace substr 以及length 有了了解。

总结:
1.在直接声明数组的情况下,如

int a [] = {1,2,3,4,5};
int sizea=sizeof(a)/sizeof(a[0]);

是可用的
但是作为形参传入函数的时候得出的长度只能是 1
2.string.replace substr 简单用法
str.replace(从第几位开始替换,替换几个字符,要替换的字符串,必须是string类型)
或者是
replace(迭代器 str.begin/end/find(),迭代器,字符串);

获取字符串
str.substr(开始位置,要几个字符或者说长度不写的话直接到最后)
str.find(字符串) 注意返回的是个位置 int?未探明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值