字串之字串平移(java實現)
測試樣例:
"ABCDE",5,3
解析:解題思路比較簡單,假設字串長度為n,則首先分別逆序0-(len-1)和len-(n-1)的子串,然後見整個字串再次逆序,即可得到結果。
演算法實現:(以下程式碼本人親自測試無誤)
import java.util.*; public class Translation { public String stringTranslation(String A, int n, int len) { // write code here char[] c = A.toCharArray(); reverse(c,0,len-1); reverse(c,len,n-1); reverse(c,0,n-1); return String.valueOf(c); } public void reverse(char[] c,int left,int right){ while(left<right){ swap(c,left,right); left++; right--; } } public void swap(char[] c,int a,int b){ char t = c[a]; c[a] = c[b]; c[b] = t; } }
相關推薦
字串之字串平移(java實現)
對於一個字串,請設計一個演算法,將字串的長度為len的字首平移到字串的最後。給定一個字串A和它的長度,同時給定len,請返回平移後的字串。 測試樣例: "ABCDE",5,3 解析:解題思路比較簡單,假設字串長度為n,則首先分別逆序0-(len-1)和len-(n-
劍指offer之將字串轉換成整數(Java實現)
將字串轉換成整數 NowCoder 題目描述: 將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。 輸入描述: 輸入一個
排序算法入門之快速排序(java實現)
大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換 快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序
設計模式之代理模式(java實現)
代理模式(Proxy):結構型的設計模式,目的是為其他物件提供一種代理以控制對這個物件的訪問。 即,它的思想是控制類或者介面對外的功能。 代理模式分為靜態代理模式和動態代理模式兩種。 在Spring中代理模式常見的是在AOP模組中,比如 JdkDynamicAopProxy
設計模式之委派模式(java實現)
委派模式(delegate):並不屬於23種設計模式,但是面向物件常用的一種設計模式,而且在SpringMVC原始碼中有大量使用。這種模式原理就是類 B和類 A 是兩個互相沒有任何關係的類,B 具有和 A 一模一樣的方法和屬性;並且呼叫
設計模式之原型模式(java實現)
原型模式(Prototype Pattern):就是從一個物件再建立另一個可定製物件的,而且不需要知道任何建立的細節。所謂原型模式,就是 Java 中的克隆技術,以某個物件為原型。複製出新的物件。顯然新的物件具備原 型物件的特點,效率高(避免了重新執行構造過程步驟)。 所以當直接建立物件代價
劍指offer之跳臺階(Java實現)
跳臺階 NowCoder 題目描述: 一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。 ###解題思路: 對於第n個臺階來說,只能從n-1或者n-2的臺階跳上來,所以 F(n) = F(n-1) +
劍指offer之矩形覆蓋(Java實現)
矩形覆蓋 NowCoder 題目描述: 我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法? ###解題思路: 2*n的大矩形,和n個2*1的小矩形 其中target*2為大矩陣的大小
設計模式之模板模式(java實現)
模板模式(Template):行為型模式的一種,定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。Template Method 使得子類可以不改變 一個演算法的結構即可重定義該演算法的某些特定步驟。 簡單的理解就是,一個架構或者業務的主體邏輯和流程是確定的,那麼我們可以將它
排序演算法之——計數排序(Java實現)
今天,我來講一講計數排序。計數排序與堆排序快速排序等排序不同,它是一種非比較排序,已經有人證明過,比較排序的時間下界是Ω(nlogn),但這個性質是不適用於計數排序的,因為它不是比較排序。他的時間是線性的。 計數排序假設n個輸入,每個都是介於0
從零開始學習演算法(Java實現)~~~~之字串篇~~~判斷兩個字串是否是顛倒字母順序構成的
從今天開始記錄一下學習演算法的例程,貴在堅持! 寫出一個函式 anagram(s, t) 去判斷兩個字串是否是顛倒字母順序構成的 樣例 給出 s="abcd",t="dcab",返回 true 難都係數* 以下是java程式碼實現: public class So
【演算法】給定兩個字串,確定一個字串重新排列後能否變成另一個字串(java實現)
分析:兩個字串的長度都不相同時,不可能是變位詞 package com.billkang.algorithm; import java.util.Arrays; /** * 給定兩個字串,確
LeetCode 541. 反轉字串(java實現)
給定一個字串和一個整數 k,你需要對從字串開頭算起的每個 2k 個字元的前k個字元進行反轉。如果剩餘少於 k 個字元,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字元,則反轉前 k 個字元,並將剩餘的字元保持原樣。 示例: 輸入: s = "abcdef
找出兩個字串中最大的公共子串(java實現)
import java.util.HashSet; import java.util.Set; public class Test { public static void main(String[] args) { String
LeetCode 345. 反轉字串中的母音字母(java 實現)
編寫一個函式,以字串作為輸入,反轉該字串中的母音字母。 示例 1: 輸入: "hello" 輸出: "holle" 示例 2: 輸入: "leetcode" 輸出: "leotcede" 說明: 母音字母不包含字母"y"。 //雙指標 class Solution
在一個字串中找到第一個只出現一次的字元(java實現)
題目:在一個字串中找到第一個只出現一次的字元。如輸入abaccdeff,則輸出b。 分析:這道題是2006 年google 的一道筆試題。 時間換空間,類似前面時間CSDN討論的一道華為的面試題:在O(n)時間內,得出一個字串每一個字元出現的次數類似; 用到這道題
排序算法入門之希爾排序(java實現)
入門 介紹 插入 一次 變化 shells ngx i++ ava 希爾排序是對插入排序的改進。插入排序是前面元素已經有序了,移動元素是一個一個一次往後移動,當插入的元素比前面排好序的所有元素都小時,則需要將前面所有元素都往後移動。希爾排序有了自己的增量,可以理
面試題:編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。(c++實現)
例項說明 示例 1: 輸入: ["flower","flow","flight"] 輸出: "fl" 示例 2: 輸入: ["dog","racecar","car"] 輸出: "" 解釋: 輸入不存在公共字首。 說明: 所有輸入只包含小寫字母 a-z&
LeetCode題目--字串轉整數 (atoi)(python實現)
題目 實現 atoi,將字串轉為整數。 該函式首先根據需要丟棄任意多的空格字元,直到找到第一個非空格字元為止。如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的數字字元組
動態規劃之完全揹包問題(java實現)
之前寫了01揹包問題,現在寫完全揹包問題。和01揹包不同的是,完全揹包不限定某種物品的件數,可以裝0,1,2,...,而01揹包只有裝與不裝的區別。但是思考問題的方式還是一樣的,我就其中的最大值。詳細程式碼和註釋見下面程式碼。 package backpack; /* f[i][v]:前i件物