未来属于那些相信梦想,并愿意为之付诸行动的人。
仅仅反转字母
字符串中的第一个唯一字符
字符串最后一个单词的长度
验证回文串
字符串相加
反转字符串||
反转字符串中的单词|||
字符串相乘
找出字符串中第一个只出现一次的字符
仅仅反转字母
双指针
我们使用 left 指针从左边开始扫描字符串s, right指针从右边开始扫描字符串 s。如果两个指针都扫描到字母,且 left 哈希表 用栈处理 数组下标 哈希表 我们直接按题意进行模拟:反转每个下标从 2k2k 的倍数开始的,长度为 kk 的子串。若该子串长度不足 kk,则反转整个子串。 在相乘或者相加计算过程的每一位,我们可以考虑先不去满10进位,等到计算完所有的相乘结果以后,最终将其加到一块,再去满10进位 ,最后的结果和普通竖式 一样,但却可以大大简化我们的模拟过程。(如下图所示) 1、长度是n和长度是m的数字相乘,最多只有n + m位,为了方便计算,将num1和num2反向存储到A[]和B[]中,即位数低的在数组前面,且开一个大小是n + m的C[]存储计算后的答案。 这一题和上面一题极为相似,那题我用了数组下标做的,这题当然也是可以,不过换个思路做,拓展下知识面. 欢迎分享,转载请注明来源:内存溢出class Solution {
public:
bool letter(char ch)
{
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
return true;
}
else{
return false;
}
}
string reverseOnlyLetters(string s) {
int begin=0;
int end=s.size()-1;
while(begin
class Solution {
public:
string reverseOnlyLetters(string s) {
map
字符串中的第一个唯一字符
class Solution {
public:
//栈
string reverseOnlyLetters(string s) {
stack
class Solution {
public:
int firstUniqChar(string s) {
int count[26]={0};
int len=s.size()-1;
for(int i=0;i<=len;i++)
{
count[s[i]-'a']++;
}
for(int i=0;i<=len;i++)
{
if(count[s[i]-'a']==1)
{
return i;
}
}
return -1;
}
};
字符串最后一个单词的长度
class Solution {
public:
int firstUniqChar(string s) {
unordered_map
验证回文串
#include
字符串相加
class Solution {
public:
bool isletter(char ch)
{
//判断是否是字母或者是数字
if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
return true;
}
else{
return false;
}
}
bool isPalindrome(string s) {
//先把大写字母转换成小写字母
for(auto& ch:s)
{
if(ch>='a'&&ch<='z')
{
ch-=32;
}
}
int begin=0,end=s.size()-1;
while(begin
反转字符串||
class Solution {
public:
//大数相加
//从后往前加+=,以后再用reverse反转过来
// 123
// + 48
string addStrings(string num1, string num2) {
int end1=num1.size()-1;
int end2=num2.size()-1;
int value1=0,value2=0,next=0;
int addret=0;
string sum;
while(end1>=0||end2>=0)
{
if(end1>=0)
{
value1=num1[end1--]-'0';
}
else{
value1=0;
}
if(end2>=0)
{
value2=num2[end2--]-'0';
}
else{
value2=0;
}
addret=value1+value2+next;
if(addret>9)
{
next=1;
addret-=10;
}
else{
next=0;
}
sum+=(addret+'0');
}
if(next==1)
{
sum+='1';
}
reverse(sum.begin(),sum.end());
return sum;
}
};
反转字符串中的单词|||
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.length();
for (int i = 0; i < n; i += 2 * k) {
reverse(s.begin() + i, s.begin() + min(i + k, n));
}
return s;
}
};
字符串相乘
class Solution {
public:
string reverseWords(string s) {
if(s.size()==1||s.size()==0) return s; //如果s的长度为0或者1就没必要有后续了;
int i = 0, j = 0; //定义“双指针”吧,i后面用来指向单词end(),j用来指向单词第一个;
for(auto ch:s){
if(ch==' '){
reverse(&s[j],&s[i]); //翻转单词
j=i+1; //反复指向单词首个字符
}
++i;
}
if(s[s.size()-1]!=' ') //如果最后一个单词最后字符不是空格,那还得翻转一次
reverse(&s[j],&s[i]);
return s;
}
};
2、两个数相乘时,将A[i] * B[j]的结果累加到C[i + j]中,最后C[i + j]表示i + j这个位数的值是C[i + j](如上图所示)
3、由于C[]数组中的某些位数字可能是大于等于10的,我们从0枚举到n + m - 1,进行满10进位, 将所有位的值全部变成个位数。
4、最后将C[]数组反转输出。
找出字符串中第一个只出现一次的字符
class Solution {
public:
string multiply(string num1, string num2) {
vector
#include
评论列表(0条)