String类—力扣&牛客练习题
点击链接可直接访问题目!
leetcode- 仅仅反转字母
思路:双指针,头指针找到字母停下,尾指针找到字母停下(跳过非字母),交换位置,直到头尾指针相遇。
class Solution {
public:
bool isLetter(char ch)
{
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
return true;
return false;
}
string reverseOnlyLetters(string s) {
size_t begin=0;
size_t end=s.size()-1;
while(begin<end)
{
while(begin<end&&!isLetter(s[begin]))
{
begin++;
}
while(begin<end&&!isLetter(s[end]))
{
end--;
}
swap(s[begin],s[end]);
begin++;
end--;
}
return s;
}
};
leetcode-字符串中的第一个唯一字符
思路:用计数排序的思路,先开一个大数组,出现一次就在映射位置上记一次,最后按从左到右的顺序,若只有一次的直接返回下标
class Solution {
public:
int firstUniqChar(string s) {
int count[256]={0};
for(int i=0;i<s.size();i++)
{
count[s[i]]++;
}
for(int i=0;i<s.size();i++)
{
if(count[s[i]]==1)
{
return i;
}
}
return -1;
}
};
牛客-字符串最后一个单词的长度
思路:利用rfind获取从后往前第一个空格的位置下标即可
#include <iostream>
using namespace std;
#include<string>
int main() {
string s;
getline(cin,s);
int length=0;
int rend = s.size()-1;
int pos=s.rfind(" ");
length=rend-pos;
cout<<length;
}
leetcode-验证回文串
思路,先将所有字母转化为大写字母,再利用正反向迭代器,正向迭代器遍历后将字母放进新的string中,反向迭代器同理,最后比较字符串
class Solution {
public:
bool isLetterOrNumber(char ch)
{
return
(ch>='A'&&ch<='Z')
|| (ch>='0'&&ch<='9');
}
bool isPalindrome(string s) {
string s1;
string s2;
for(auto& ch : s)
{
if(ch >= 'a' && ch <= 'z')
ch -= 32;
}
string::iterator it=s.begin();
while(it!=s.end())
{
if(isLetterOrNumber(*it))
{
s1+=*it;
}
it++;
}
string::reverse_iterator rit=s.rbegin();
while(rit!=s.rend())
{
if(isLetterOrNumber(*rit))
{
s2+=*rit;
}
rit++;
}
return(s1==s2);
}
};
leetcode-字符串相加
思路:从字符串尾部间开始相加,大于九则进一,加完后再放进新string类型中,迭代往前直到加完,最后反转新字符串
class Solution {
public:
string addStrings(string num1, string num2) {
int end1=num1.size()-1;
int end2=num2.size()-1;
int next=0;
string ret;
int val1=0,val2=0,val=0;
while(end1>=0||end2>=0)
{
if(end1>=0)
{
val1=num1[end1--]-'0';
}
else
val1=0;
if(end2>=0)
{
val2=num2[end2--]-'0';
}
else
val2=0;
val=val1+val2+next;
if(val>9)
{
next=1;
val-=10;
}
else
{
next=0;
}
ret+= (val+'0');
}
if(next==1)
{
ret+='1';
}
reverse(ret.begin(),ret.end());
return ret;
}
};