反转字符串 II
题目链接 .题意 :给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。思路 :题目要求每2k
个字符要进行一次反转。用l
来记录字符串的长度,l>0
作为循环条件,每反转一次l=l-2k
,m+1记录循环次数,用m得到要反转的字符起始位置。
class Solution {
public :
string reverseStr ( string s, int k) {
int l= size ( s) ;
int i, j, m= 0 ;
while ( l> 0 ) {
if ( l< k) {
for ( i= m* k, j= size ( s) - 1 ; i< j; i++ , j-- ) {
char t= s[ i] ;
s[ i] = s[ j] ;
s[ j] = t;
}
}
else {
for ( i= m* k, j= i+ k- 1 ; i< j; i++ , j-- ) {
char t= s[ i] ;
s[ i] = s[ j] ;
s[ j] = t;
}
}
l= l- 2 * k;
m= m+ 2 ;
}
return s;
}
} ;
剑指 Offer 58 - II. 左旋转字符串
题目链接 .题意 :字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。思路 :
切片,将字符串分割为两个,然后交换顺序相加。
class Solution {
public :
string reverseLeftWords ( string s, int n) {
string a, b;
int i= 0 ;
for ( auto ss: s) {
if ( i< n) {
a. push_back ( ss) ;
}
else {
b. push_back ( ss) ;
}
i++ ;
}
b= b+ a;
return b;
}
} ;
原地翻转字符串,三次翻转 。 1.反转区间为前n的子串,2. 反转区间为n到末尾的子,3. 反转整个字符串
class Solution {
public :
string reverseLeftWords ( string s, int n) {
for ( int i= 0 , j= n- 1 ; i< j; ++ i, -- j) {
char t= s[ i] ;
s[ i] = s[ j] ;
s[ j] = t;
}
for ( int i= n, j= size ( s) - 1 ; i< j; ++ i, -- j) {
char t= s[ i] ;
s[ i] = s[ j] ;
s[ j] = t;
}
for ( int i= 0 , j= size ( s) - 1 ; i< j; ++ i, -- j) {
char t= s[ i] ;
s[ i] = s[ j] ;
s[ j] = t;
}
return s;
}
} ;
翻转字符串里的单词
题目链接 题意 :给你一个字符串 s ,逐个翻转字符串中的所有单词 。思路 :遍历字符串,当s[i]
为空格时,跳过空格,当s[i]
不为空格时,使用j
来查找下一个空格的位置,此时我们知道s[i]
和s[j]
之间存在一个单词,使用s.substr(i,j-i)
(i是起始位置,j-i是剪切个数)提取出这个单词加入vector,然后令i=j
继续进行循环。将所有单词加入vector之后,对vector进行倒序遍历,ans=ans+a[i]+' ';
最后再加上a[0]
,得到结果。
class Solution {
public :
string reverseWords ( string s) {
vector< string> a;
string ans;
for ( int i= 0 ; i< size ( s) ; ++ i) {
if ( s[ i] == ' ' ) continue ;
else {
int j= i;
while ( s[ j] != ' ' && j< size ( s) ) {
j++ ;
}
string word= s. substr ( i, j- i) ;
a. emplace_back ( word) ;
i= j;
}
}
for ( int i= size ( a) - 1 ; i> 0 ; -- i) {
ans= ans+ a[ i] + ' ' ;
}
return ans+ a[ 0 ] ;
}
} ;