zoukankan      html  css  js  c++  java
  • leadcode 541. Reverse String II

    package leadcode;
    
    /**
     * 541. Reverse String II
     * Easy
     * 199
     * 575
     *
     *
     * Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.
     * Example:
     * Input: s = "abcdefg", k = 2
     * Output: "bacdfeg"
     * Restrictions:
     * The string consists of lower English letters only.
     * Length of the given string and k will in the range [1, 10000]
     */
    public class L541 {
        public String reverseStr(String s, int k) {
            StringBuilder sb = new StringBuilder();
            int len = s.length();
            int count = len/(2*k)-1;
            int remaining = len%(2*k);
            if (remaining!=0){
                count = count+1;
            }
            for (int i=0;i<=count;i++){
                if(remaining!=0 && i==count){
                    int cout2k = 2*k*(i+1);
                    int coutk =  2*k*i+k;
                    if(len<coutk){
                        StringBuilder sb3 = reverse(s,2*k*i,len);
                        sb.append(sb3);
                    }else if(len<cout2k){
                        StringBuilder sb3 = reverse(s,2*k*i,coutk);
                        sb.append(sb3);
                        StringBuilder sb4 = retain(s,coutk,len);
                        sb.append(sb4);
                    }
                }else {
                    StringBuilder sb1 = reverse(s,2*k*i,2*k*i+k);
                    sb.append(sb1);
                    StringBuilder sb2 = retain(s,2*k*i+k,2*k*(i+1));
                    sb.append(sb2);
                }
            }
            return new String(sb);
        }
    
        private StringBuilder reverse(String s,int begin,int end){
            return new StringBuilder(s.substring(begin,end)).reverse();
        }
    
        private StringBuilder retain(String s,int begin,int end){
            return new StringBuilder(s.substring(begin,end));
        }
    
    }
    class Solution {
    public String reverseStr(String s, int k) {
            char[] str=s.toCharArray();
            int i;
            int len=str.length;
            for(i=0;i<len;i+=2*k){
                if(i+k-1 >= len || i+(2*k)-1 >= len)
                    break;
                reverse(str,i,i+k-1);
            }
            // if < 2k 
            if(i+k-1 < len)
                reverse(str,i,i+k-1);
        // if < k
            else if(i< len && i+k-1 >= len)
                reverse(str,i,len-1);
                
            return new String(str);
        }
        public void reverse(char[] str, int i, int j){
            while(i<j){
                char temp=str[i];
                str[i]=str[j];
                str[j]=temp;
                i++;
                j--;
            }
            
        }
    }
    class Solution {
        public String reverseStr(String s, int k) {
            char[] a = s.toCharArray();
            for (int start = 0; start < a.length; start += 2 * k) {
                int i = start, j = Math.min(start + k - 1, a.length - 1);
                while (i < j) {
                    char tmp = a[i];
                    a[i++] = a[j];
                    a[j--] = tmp;
                }
            }
            return new String(a);
        }
    }
  • 相关阅读:
    c#读取excel导入到数据库中
    查找同一个表中某个字段中有相同的数据
    Url传值编码UrlEncode和解码UrlDecode
    FOR ALL ENTRIES IN
    设置自动增长列从哪里开始增长
    More than 100 ABAP Interview Faq's(1)
    使用__FILE__和__LINE__
    Windows API封装:LoadLibrary/FreeLibrary
    Singleton模式笔记
    C++接口着色技术
  • 原文地址:https://www.cnblogs.com/chengpeng15/p/10034020.html
Copyright © 2011-2022 走看看