《算法零基础100讲》(第25讲) 字符串算法(五) - 字符串反转_英雄哪里出来-CSDN博客
字符串的反转经常会出现在各种题中,现在介绍两种c++反转字符串的方法.
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s[10000];
cin>>s;
strrev(s);//cstring库函数里的
cout<<s<<endl;
return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
string s;
cin>>s;
reverse(s.begin(),s.end());//algorithm库函数
cout<<s<<endl;
return 0;
}
344. 反转字符串 - 力扣(LeetCode) (leetcode-cn.com)?
void reverseString(char* s, int sSize){
for (int i = 0; i < sSize / 2; i++) {//对半分
char c = s[i];//交换下标
s[i] = s[sSize -i - 1];
s[sSize -i - 1] = c;
}
}
2000. 反转单词前缀 - 力扣(LeetCode) (leetcode-cn.com)
给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。
例如,如果 word = "abcdefd" 且 ch = "d" ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 "dcbaefd" 。 返回 结果字符串 。
示例 1:
输入:word = "abcdefd", ch = "d" 输出:"dcbaefd" 解释:"d" 第一次出现在下标 3 。? 反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "dcbaefd" 。
示例 2:
输入:word = "xyxzxe", ch = "z" 输出:"zxyxxe" 解释:"z" 第一次也是唯一一次出现是在下标 3 。 反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "zxyxxe" 。
示例 3:
输入:word = "abcd", ch = "z" 输出:"abcd" 解释:"z" 不存在于 word 中。 无需执行反转操作,结果字符串是 "abcd" 。 ?
提示:
1 <= word.length <= 250 word 由小写英文字母组成 ch 是一个小写英文字母
?第一种c++stl
class Solution {
public:
void reverseString(vector<char>& s) {
reverse(s.begin(),s.end());
}
};
第二种众人皆知
class Solution {
public:
void reverseString(vector<char>& s) {
int len=s.size()-1;
int l=0;
while(l<len)
{
swap(s[l++],s[len--]);//将前后字母全部交换
}
}
};
7. 整数反转 - 力扣(LeetCode) (leetcode-cn.com)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围?[?231,??231?? 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。 ?
示例 1:
输入:x = 123 输出:321
示例 2:
输入:x = -123 输出:-321
示例 3:
输入:x = 120 输出:21
示例 4:
输入:x = 0 输出:0 ?
提示:
-231 <= x <= 231 - 1
class Solution {
public:
int reverse(int x) {
long t=0;
while(x)
{
t=t*10+x%10;
x=x/10;
}
return (t>INT_MAX||t<INT_MIN)?0:t;//c++,limits函数库
}
};
2000. 反转单词前缀 - 力扣(LeetCode) (leetcode-cn.com)
给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。
例如,如果 word = "abcdefd" 且 ch = "d" ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 "dcbaefd" 。 返回 结果字符串 。
示例 1:
输入:word = "abcdefd", ch = "d" 输出:"dcbaefd" 解释:"d" 第一次出现在下标 3 。? 反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "dcbaefd" 。
示例 2:
输入:word = "xyxzxe", ch = "z" 输出:"zxyxxe" 解释:"z" 第一次也是唯一一次出现是在下标 3 。 反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 "zxyxxe" 。
示例 3:
输入:word = "abcd", ch = "z" 输出:"abcd" 解释:"z" 不存在于 word 中。 无需执行反转操作,结果字符串是 "abcd" 。 ?
提示:
1 <= word.length <= 250 word 由小写英文字母组成 ch 是一个小写英文字母
?这里需要了解find函数,string自带的函数find(),可查找指定字符串和指定字符。
使用方法:例如在string1中查找string2,string1.find(string2);
返回值为string2第一次在string1出现的位置。
如果希望在特定位置开始查找,可以使用string1.find(string2,location);
class Solution {
public:
string reversePrefix(string word, char ch) {
reverse(word.begin(),word.begin()+word.find(ch)+1);
return word;
}
};
345. 反转字符串中的元音字母 - 力扣(LeetCode) (leetcode-cn.com)
这道题借用了英雄哥的思想,属实不会了,然后我看完英雄哥的思想后又找了类型题做的
char vowels[] = "aeiouAEIOU";//将所有元音字母打出来以方便判断
bool isVowel(char c) {//用来判断的函数
int i;
for(i = 0; vowels[i]!='\0'; ++i) {//这里的for循环大家可能会很陌生,相当于for(int i=0;vowels[i];++i)
if(vowels[i] == c) {//判断是否是元音字母
return true;
}
}
return false;
}
void swap(char *a, char *b) {//交换变量,指针部分
char tmp = *a;
*a = *b;
*b = tmp;
}
char * reverseVowels(char * s){
int i = 0, j = strlen(s)-1;
while(i < j) {
while(s[i] && !isVowel(s[i]))//如果从前往后判断,不是元音字母则i自增
++i;
while(j >= 0 && !isVowel(s[j]))//如果从后往前判断,不是元音字母则自减
--j;
if(i >= j) break;//如果i>j就没必要自增了,因为你前一部分都没有元音字母,后一部分有也无所谓了,即不能互换
swap( &s[i], &s[j] );
++i, --j;//继续往中间靠近直到i=j结束while循环
}
return s;
}
这段时间较忙,待我有时间一定会找出题的最优解
|