《算法零基础100讲》(第25讲) 字符串算法(五) - 字符串反转_英雄哪里出来-CSDN博客
字符串的反转经常会出现在各种题中,现在介绍两种c++反转字符串的方法.
#include#include using namespace std; int main() { char s[10000]; cin>>s; strrev(s);//cstring库函数里的 cout< #include#include #include using namespace std; int main() { string s; cin>>s; reverse(s.begin(),s.end());//algorithm库函数 cout< 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& s) { reverse(s.begin(),s.end()); } }; 第二种众人皆知
class Solution { public: void reverseString(vector& s) { int len=s.size()-1; int l=0; while(l 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||t2000. 反转单词前缀 - 力扣(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]!=' '; ++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; }这段时间较忙,待我有时间一定会找出题的最优解



