今天开始刷leecode,写了三个简单的算法,但是却给我带来了巨大的困难。例题如下,
- 给定字符串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?未探明。