zoukankan      html  css  js  c++  java
  • *LeetCode--Reverse String II (自己的做法很笨)

    Reverse String II

    自己的解法:

    就是用一个StringBuffer来进行字符串的接收,利用一个指针来指示当前是哪一个k部分,当 i + k < s.length() 时,证明从 i 到 i + k - 1部分是可以进行反转的,而从i + k 部分到 i + 2 * k部分是直接进行拼接,利用条件 j < s.length()即可进行限制,不过对于最后剩余的一小部分如果是需要反转的,那么就不能使用上面反转时使用的条件 : 从j = i + k - 1 ,而是从 j = s.length() - 1开始到  i 结束

    class Solution {
        public String reverseStr(String s, int k) {
            if(s == null || s.length() == 0 || k == 0) return s;
            StringBuffer str = new StringBuffer();
            int i = 0;
            while(i + k < s.length()){
                for(int j = i + k - 1; j >= i && j < s.length(); j--){
                    str.append(s.charAt(j));
                }
                i += k;
                for(int j = i; j < i + k && j < s.length(); j++){
                    str.append(s.charAt(j));
                }
                i += k;
            }
            
            if(i + k >= s.length()){
                for(int j = s.length() - 1; j >= i; j--){
                    str.append(s.charAt(j));
                }
            }
            
            return str.toString();
        }
    }
    

      

     public String reverseStr(String s, int k) {
            if(s == null || s.isEmpty()){return s;}
            StringBuilder sb = new StringBuilder();
            boolean reverse = true;
            for(int i = 0; i < s.length(); i = i + k, reverse = !reverse){
                int end = (i + k) < s.length() ? (i + k - 1) : s.length()-1;
                if(reverse)
                    for(int j = end; j >= i; j--){sb.append(s.charAt(j));} // Copy in reverse
                else
                    for(int j = i; j <= end; j++){sb.append(s.charAt(j));} // Copy as it is
            }
            return sb.toString();
        }
    

      

    public String reverseStr(String s, int k) {
            char[] ch = s.toCharArray();
            for (int i = 0; i < ch.length; i += 2 * k) {
                rev(ch, i, i + k);
            }
            return String.valueOf(ch);
        }
        
        private void rev(char[] ch, int i, int j) {
            j = Math.min(ch.length, j) - 1;
            for (; i < j; i++, j--) {
                char tmp = ch[i];
                ch[i] = ch[j];
                ch[j] = tmp;
            }
        }
    

      

  • 相关阅读:
    2012的目标
    让顺丰快递给折腾了,昨晚发的快递,现在还没挪地方
    做的FM收音机终于交工,老婆验收完毕
    C语言宏定义使用技巧
    20棵树植树问题
    C简单实现动态2维数组
    运动量测试
    #pragma pack(n)的含义及其用法
    回调函数
    ubuntu 全局配置文件
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/9060718.html
Copyright © 2011-2022 走看看