這是一道中等難度的字符串題目寸爆。本來(lái)按照我的想法,我覺得邏輯上沒有問(wèn)題粮彤,但是出在JAVA上的細(xì)節(jié)問(wèn)題兵志。雖然醇蝴,我的邏輯方法自己覺得很生硬。
題目
給出一個(gè)字符串?dāng)?shù)組S想罕,找到其中所有的亂序字符串(Anagram)悠栓。如果一個(gè)字符串是亂序字符串,那么他存在一個(gè)字母集合相同按价,但順序不同的字符串也在S中惭适。
樣例
對(duì)于字符串?dāng)?shù)組["lint","intl","inlt","code"]
返回["lint","inlt","intl"]
我的想法
1.首先通過(guò)length,即字符串的長(zhǎng)度楼镐,從開始掃描癞志,找到長(zhǎng)度一致的字符串,然后再比較是否是亂序的框产。
2.如何比較是否是亂序的呢凄杯,我的想法是只要是組成這兩個(gè)字符串的字符是相同的,就算秉宿。那么如何比較兩個(gè)字符串的字符是否相同呢戒突? 我的想法是通過(guò)兩個(gè)for循環(huán)比較,聲明兩個(gè)String []變量描睦,比較這兩個(gè)膊存。
代碼
import java.util.List;
import java.lang.instrument.*;
public class Solution {
public static String[] iteration;
public static String[] temp;
public static String[] compare;
Solution() {};
private static void swap(int i, int j) {
}
private? boolean isthesame(String[] a, String[] b) {
for ( int i = 0 ; i < a.length; i ++) {
for ( int j = i; j < b.length; j++) {
if(b[j]==a[i]) {
String tempo = b[j];
b[j] = b[i];
b[i] = tempo;
break;
}
if (j == b.length -1) {
return false;
}
}
}
return true;
}
public String[] anagrams(String[] strs) {
int n = strs.length;
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
if(strs[j].length() == strs[i].length() ) {
for (int z = 0; z < strs[j].length(); z++) {
this.temp[z]=strs[j].substring(z, z+1);
this.compare[z] = strs[i].substring(z, z+1);
}
}
if (isthesame(this.compare,this.temp)) {
this.iteration[j] = strs[j];
}
}
if(this.iteration.length != 0) {
this.iteration[0] = strs[i];
break;
}
}
return this.iteration;
}
public static void main(String[] args) {
Solution ss = new Solution();
String[]? s={"lint","intl","inlt","code"};
try{ss.anagrams(s);}
catch(Exception e) {
System.out.print("error");
}
}
}
調(diào)用結(jié)果老是出錯(cuò),我自己測(cè)試了一下忱叭,應(yīng)該是錯(cuò)在this.iteration[j] = strs[j];這樣的賦值步驟上隔崎,由于我還是JAVA新手,這種細(xì)節(jié)還是不太懂窑多,為什么不能這樣賦值呢仍稀?
問(wèn)題:
雖然我自覺想法沒錯(cuò),但是我還是認(rèn)為這種暴力解法沒有優(yōu)化埂息,接下來(lái)繼續(xù)想更好的方法。