字符串

151. 翻转字符串里的单词
  • 首先明确的是在c++中stl已经封装好了一个string类供使用
  • 主要的思路:
    方法:双指针
  1. 倒序遍历字符串s,记录单词左右边界i,j;
  2. 每确定一个单词的边界,则将其添加至单词列表res;
  3. 最终,将单词列表拼接为字符串,并返回即可。
string reverseWords(string s){
   string res;
   if(s.length()==0) return res;
   int right = s.length() -1;

   # 开始搜索
   # 当right<=退出循环,此时整个字符串遍历完
   while(right>=0){
   	# 1.消除末尾多余空格
   	while(right>=0 && s[right]==' ') right--;
   	if(right<0) break;
   	# 2.已经定位到末尾第一个单词尾部字母处
   	int left = right;
   	# 3.扫描单词
   	while(left>=0 && s[left]!=' ') left--;
   	# 4.添加单词,尾部空格
   	res+=s.substr(left+1, right-left);
   	res+=' ';
   	# 准备加入下一个单词
   	right = left;
   }
   // 去除尾部的空格
   if(!res.empty())
   	res.pop_back();
   return res;
}
剑指 Offer 58 - II. 左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

/*
    string reverseLeftWords(string s, int n) {
      string res;
      int length = s.length();
      if(length==0) return res;
      n = n % length;
      res+=s.substr(n, length-n);
      res+=s.substr(0, n);

      return res;
    }*/
    // 若面试中规定不能使用切片函数咋办
    string reverseLeftWords(string s, int n){
      string ans = "";
      int length = s.length();
      n = n%length;
      for(int i = n; i<length; i++) ans+=s[i];
      for(int i = 0; i<n; i++) ans+=s[i];
      return ans;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值