【LeetCode】1417. 重新格式化字串(Java)
給你一個混合了數字和字母的字串 s,其中的字母均為小寫英文字母。
請你將該字串重新格式化,使得任意兩個相鄰字元的型別都不同。也就是說,字母后面應該跟著數字,而數字後面應該跟著字母。
請你返回 重新格式化後 的字串;如果無法按要求重新格式化,則返回一個 空字串 。
解法一
寫得不好,思路是把數字和字元分別存到list中,然後判斷兩個list的長度,長的做起始位,長出2個及以上返回"",然後迴圈拼接到StringBuilder裡。
class Solution {
public String reformat(String s) {
//把字串裡的數字和字元分別存放到對應的list中
List<Character> nums = new ArrayList();
List<Character> chars = new ArrayList();
for (char c : s.toCharArray()) {
if (c >= '0' && c <= '9') nums.add(c);
else chars.add(c);
}
//判斷兩個list的個數
//如果個數相差超過1個,那麼就不符合
if (Math.abs(nums.size() - chars.size()) > 1) return "";
//判斷是數字多還是字元多,多的當起始位
boolean startNum = nums.size() >= chars.size() ? true : false;
StringBuilder sb = new StringBuilder();
//拼接
int x = 0, y = 0;
while (x < nums.size() && y < chars.size()) {
if (startNum) {
sb.append(nums.get(x));
sb.append(chars.get(y));
} else {
sb.append(chars.get(y));
sb.append(nums.get(x));
}
x++;
y++;
}
//因為迴圈是用&&,所以可能會有剩餘,判斷是否還有剩餘字元
if (x != nums.size()) sb.append(nums.get(x));
else if (y != chars.size()) sb.append(chars.get(y));
return sb.toString();
}
}
用到了兩個list,一個StringBuilder,空間用多了,直接步驟也過多,效率不行,解法二我直接複製過來,寫得挺厲害的,我在這裡卡了半天,中間因為邏輯出錯,又重新推到重來。
解法二
解法二是在題解區複製過來的。(作者:1905215165)
解法二的思路:先把所有字元存到陣列裡,然後遍歷得出,數字和字元的數量;然後判斷是哪個數量多,多的做起始位,如果其中數量比另一個多出2個及以上,就返回"";這裡和我步驟差不多,接下來就厲害了,使用增強for迴圈遍歷判斷是數字還是字元,然後放到原陣列裡,每次加2,這樣數字和字元就不會衝突,各自做各自的,這點省去了很多判斷。
class Solution {
public String reformat(String s) {
int num1=0,num2=0;
char[] chars = s.toCharArray();
for(char c:chars){
if(c >= '0'&&c <= '9'){num1++;}
else{num2++;}
}//看數字字元比較多還是字母字元比較多
if( num1-num2<-1 || num1-num2>1){return "";}
if(num1>num2){
num1 = 0;num2 = 1;
}else{
num1 = 1;num2 = 0;
}
for(char c:s.toCharArray()){
if(c >= '0'&&c <= '9'){chars[num1] = c; num1 += 2;}
else{chars[num2] = c; num2 += 2;}
}
return new String(chars);
}
}
//作者:1905215165
相關文章
- 【java初探】——格式化字串Java字串
- leetcode:字串相乘(java)LeetCode字串Java
- java字串%s格式化替換方法Java字串
- java 字串格式化String.format()使用Java字串格式化ORM
- 字串 格式化字串
- 格式化字串字串
- JAVA字串格式化-String.format()的使用Java字串格式化ORM
- Golang字串格式化Golang字串格式化
- Golang 字串 格式化Golang字串
- LeetCode刷題進階之重新排列字串(1528)LeetCode字串
- JAVA字串格式化-String.format()的使用 (轉載)Java字串格式化ORM
- Python:字串格式化Python字串格式化
- js 字串格式化方法JS字串格式化
- Python 字串格式化Python字串格式化
- Python中的字串與字串格式化Python字串格式化
- python字串的格式化Python字串
- 字串拼接格式化輸出字串
- 課時15:字串:格式化字串
- Python 字串的格式化Python字串
- 使用C#格式化字串C#字串
- Python 字串格式化指南Python字串格式化
- 字串格式化-%s%d%f字串格式化
- 字串格式化快速寫法字串格式化
- Unity String格式化字串Unity字串
- 善用 Format 來格式化字串ORM字串
- Hadoop重新格式化HDFS的方法Hadoop
- pwn初識格式化字串漏洞字串
- python字串格式化輸出Python字串格式化
- Python用format格式化字串PythonORM字串
- 【Python】格式化字串輸出Python字串
- 格式化字串漏洞沉浸式理解字串
- Java格式化Java
- python學習之字串常用方法和格式化字串Python字串
- 漏洞挖掘基礎之格式化字串字串
- Python 字串格式化(Python IO)Python字串格式化
- Python中的字串格式化方法Python字串格式化
- python字串格式化的方法整理Python字串格式化
- Python 字串格式化輸出方式Python字串格式化