zoukankan      html  css  js  c++  java
  • LeetCode 面试题58

    我的LeetCode:https://leetcode-cn.com/u/ituring/

    我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

    LeetCode 面试题58 - II. 左旋转字符串

    题目

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

    示例 1:

    输入: s = "abcdefg", k = 2
    输出: "cdefgab"
    

    示例 2:

    输入: s = "lrloseumgh", k = 6
    输出: "umghlrlose"
    

    限制:

    • 1 <= k < s.length <= 10000

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路

    思路1-两次遍历

    • 第一次遍历先拼接n之后的字符;
    • 第二次遍历拼接0-n之间的字符;

    算法复杂度:

    • 时间复杂度: $ {color{Magenta}{Omicronleft(n ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(1 ight)}} $

    思路2-一次遍历

    考虑把遍历的范围定为[n,n+length],遍历时下标取i%length,那么得到下标范围为[n,length-1]和[0,n-1],且是顺序的;

    算法复杂度:

    • 时间复杂度: $ {color{Magenta}{Omicronleft(n ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(1 ight)}} $

    算法源码示例

    package leetcode;
    
    /**
     * @author ZhouJie
     * @date 2020年5月16日 下午11:30:08 
     * @Description: 面试题58 - II. 左旋转字符串
     *
     */
    public class LeetCode_Offer_58_2 {
    
    }
    
    class Solution_Offer_58_2 {
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年5月16日 下午11:31:12 
    	 * @param: @param s
    	 * @param: @param n
    	 * @param: @return
    	 * @return: String
    	 * @Description: 1-分两次遍历拼接到StringBuilder;
    	 *
    	 */
    	public String reverseLeftWords_1(String s, int n) {
    		int len = s.length();
    		StringBuilder sb = new StringBuilder(len);
    		for (int i = n; i < len; i++) {
    			sb.append(s.charAt(i));
    		}
    		for (int i = 0; i < n; i++) {
    			sb.append(s.charAt(i));
    		}
    		return sb.toString();
    	}
    
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年5月16日 下午11:35:25 
    	 * @param: @param s
    	 * @param: @param n
    	 * @param: @return
    	 * @return: String
    	 * @Description: 2-利用取模%特性一次遍历;
    	 *
    	 */
    	public String reverseLeftWords_2(String s, int n) {
    		int len = s.length();
    		StringBuilder sb = new StringBuilder(len);
    		for (int i = n; i < len + n; i++) {
    			sb.append(s.charAt(i % len));
    		}
    		return sb.toString();
    	}
    }
    
    
  • 相关阅读:
    【Office】Word排版
    小猪的压力
    SQL SERVER 自定义函数参数数量对调用时参数数量的影响
    工作效率
    C#使用SharpZipLib编辑zip包中内容
    SQL SERVER——自定义函数
    C#字符串编码
    在ASP.NET中启动SQL SERVER缓存
    C#延迟加载
    C#格式化DateTime时间
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12916393.html
Copyright © 2011-2022 走看看